2

假设我有一个异步函数返回一个承诺。我想链接很多这样的函数,每个函数都有不同的参数。

将执行此数组的函数如下所示:

function executePromiseQueueSync(queue){
    var seed = $.Deferred(),
        finalPromise;

    _reduce(queue, function(memo, promise){
        return memo.then(promise);
    }, seed.promise());

    seed.resolve();
    return finalPromise;
}

我看到一些函数接受一系列承诺并同步执行它们。问题是我不知道如何创建这样的数组。例子:

var promiseQueue = [];
promiseQueue.push(AsynchEvent(someArg)); // WRONG: this is function call and will be executed immediately

其他:

var promiseQueue = [];
promiseQueue.push(AsynchEvent); // WRONG: at some point I will have to apply this with arguments

那么 - 有没有办法将返回承诺的函数放入数组而不执行它?

4

1 回答 1

1

编辑后更新:

好吧,如果您从一开始就包含该信息会很好,所以这里尝试一下。

我假设第一个输入是已知的,并且从最后一个函数返回的应该进入列表中的下一个。

在这种情况下,我们仍然像以前一样定义并添加到队列中:

var promiseQueue = [];
promiseQueue.push(AsynchEvent);

但是我们需要修改循环。我将把它变成一个函数,只是为了展示它是如何使用的。

function calcPromise(initialArg) {
  aggregateArg = initialArg;
  for (var i = 0; i < myStringArray.length; i++) {
    aggregateArg = promiseQueue[i](aggregateArg);
  }
  return aggregateArg;
}

请记住,这是 JavaScript - 您从一个函数返回并提供给下一个函数的内容在此函数的两次迭代之间可能完全不同。例如

  • promiseQueue[0] 可以期待一个 int 并返回一个 JSON 结构。
  • promiseQueue[1] 可以期待一个 JSON 结构并返回一个字符串。
  • 等等。
于 2013-03-08T09:21:52.673 回答