कैसे जावास्क्रिप्ट में समारोह श्रृंखला में कई कार्यों को संकलित करने के?

वोट
0

मैं एक समारोह के लिए एक समारोह श्रृंखला सबसे वेब चौखटे के रूप में देखा में (एक वेब ढांचे मैं पर काम कर रहा हूँ के लिए) संकलन प्रदान करने में सक्षम होना चाहता हूँ। ऐसा करने का सबसे आसान तरीका क्या है? चलो कहते हैं कि मैं कार्यों की एक सूची है:

const middleware = [
function(data, next){
    console.log(data); 
    next()
},
function(data, next) {
   return;
}, function(data, next) { }];

उपरोक्त मामले में, आदर्श व्यवहार ट्रिगर करने के लिए पहले समारोह के लिए होगा, पैरामीटर में पारित nextकी वजह से समाप्त करने के लिए अगले समारोह और फिर श्रृंखला को ट्रिगर करने के returnबयान। कैसे मैं एक समारोह को यह संकलन सकता है?

13/01/2020 को 23:52
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
0

इस पर 100%, लेकिन मेरा मानना ​​है अगर आप पूरा उत्पाद के लिए एक चर पहले समारोह के बाद आप फिर इसे करने के लिए 2 समारोह लागू करते हैं और यह पहली बार समारोह से दूसरे करने के लिए पारित कर सकते हैं बनाने के

13/01/2020 को 23:58
का स्रोत उपयोगकर्ता

वोट
0

आप बस कार्यों की सरणी को कम कर सकते हैं:

functionList.reduce((output, fn) => fn(output), undefined);

यही कारण है, ताकि उन्हें चलेंगे परिणाम, अगली कॉल करने के लिए एक पैरामीटर के रूप में पिछले कॉल के गुजर अंततः पिछले समारोह कॉल से अंतिम परिणाम के साथ समाप्त।

एक उदाहरण के रूप में, आप अपने functionList के रूप में इस के साथ ऐसा करता है, तो:

[
  () => 4,
  n => n+5,
  n => `$${n}`,
  amt => amt + '.00'
]

परिणाम होगा $9.00

14/01/2020 को 00:10
का स्रोत उपयोगकर्ता

वोट
0

ठीक है, मैं एक जवाब मिल गया है - आप निम्नलिखित कोड है, जो मैं koa-लिखें सुविधा से अनुकूलित कर सकते हैं। मिडलवेयर श्रृंखला आप निम्नलिखित समारोह का उपयोग कर सकते संकलन करने के लिए:

function compiler(middleware) {
  // return function to execute compiled middleware chain
  return function(data, next) {
    // set pointer to 0 to match middleware index to track if next()
    // is called twice in one middleware
    let pointer = 0;
    function dispatch(i) {
      // check if pointer is larger than i, indicating next() was called more than once
      if (i < pointer)
        return Promise.reject(
          new Error("next() called multiple times in one middleware function.")
        );
      // set pointer to next index
      pointer = i + 1;
      // grab current function
      let fn = middleware[i];
      // if out of middleware, assign the next function from the parameters to be executed next
      if (i === middleware.length) fn = next;
      // if no function (out of middleware and no provided parameter), end middleware execution
      if (!fn) return Promise.resolve();
      try {
        // run next function, binding the second parameter to the next middleware in the chain
        return Promise.resolve(fn(data, dispatch.bind(null, i + 1)));
      } catch (err) {
        return Promise.reject(err);
      }
    }
    // start function on first middleware
    return dispatch(0);
  };
};

आप मिडलवेयर कार्यों संकलन और निम्नलिखित की तरह यह निष्पादित कर सकते हैं:

const funcs = [
     function(data, next){
          console.log(data); next();
     }, function(data, next){
        console.log('done');
     }];
const compiled = compiler(funcs);

// execute compiled middleware chain
compiled();
15/01/2020 को 19:43
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more