如何构造一个jquery承诺数组

How to construct an array of jquery promises?

本文关键字:一个 jquery 承诺 数组 何构造      更新时间:2023-09-26

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

执行数组的函数是这样的:

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

所以-有没有一种方法把一个函数返回一个承诺到一个数组,而不执行它?

编辑后更新:

如果你从一开始就包含这些信息就好了,所以这里有一个尝试。

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

在这种情况下,我们仍然像前面一样定义并添加Queue:

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