如何构造一个jquery promise的数组?

时间:2013-03-08 09:16:38

标签: javascript jquery jquery-deferred deferred

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

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

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

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

    seed.resolve();
    return finalPromise;
}

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

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

那么 - 有没有办法将一个函数返回一个数组而不执行它?

1 个答案:

答案 0 :(得分:1)

修改后更新:

如果你从头开始包含这些信息会很好,所以这里尝试一下。

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

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

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

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

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结构并返回一个字符串。
  • 等等。