【问题标题】:How to construct an array of jquery promises?如何构造一个jQuery承诺数组?
【发布时间】:2013-03-08 09:16:38
【问题描述】:

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

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

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

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

【问题讨论】:

  • 看看bind函数。
  • 查看已编辑的问题,函数“executePromiseQueueSync”。在这种情况下,bind 对我有什么帮助?
  • Promise 没有被执行,很难确切地知道你想要实现什么。建议您尝试用不假设特定解决方案的简单术语进行解释。

标签: javascript jquery jquery-deferred deferred


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

【讨论】:

  • 再看一遍这个问题——它现在被编辑了。你会看到我的问题。
  • 哦,是的——也许我应该让你知道。我已经更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 2013-07-10
相关资源
最近更新 更多