Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 如何链接一个可变数量的承诺在Q,按顺序?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我如何可以进行可变数量调用,每个异步返回,按顺序?
该方案是一组http请求,其数量和类型由第一个http请求的结果确定。

我想简单地这样做。

我也看到了this answer这建议像这样:

var q = require('q'),itemsToProcess =  ["one","two","three","four","five"];

function getDeferredResult(prevResult) {
  return (function (someResult) {
    var deferred = q.defer();
    // any async function (setTimeout for Now will do,$.ajax() later)
    setTimeout(function () {
      var nextResult = (someResult || "Initial_Blank_Value ") + ".." + itemsToProcess[0];
      itemsToProcess = itemsToProcess.splice(1);
      console.log("tick",nextResult,"Array:",itemsToProcess);
      deferred.resolve(nextResult);
    },600);

    return deferred.promise;
  }(prevResult));
}

var chain = q.resolve("start");
for (var i = itemsToProcess.length; i > 0; i--) {
    chain = chain.then(getDeferredResult);
}

…但是看起来很难用这种方式循环通过itemsToProcess。或者定义一个称为“循环”的抽象递归的新函数。什么是更好的方法

解决方法

一个很好的干净的方式到这与 [].reduce

var chain = itemsToProcess.reduce(function (prevIoUs,item) {
    return prevIoUs.then(function (prevIoUsvalue) {
        // do what you want with prevIoUs value
        // return your async operation
        return Q.delay(100);
    })
},Q.resolve(/* set the first "prevIoUsValue" here */));

chain.then(function (lastResult) {
    // ...
});

reduce遍历数组,传递上一次迭代的返回值。在这种情况下,你返回promises,所以每次你链接一个。你提供一个初始的承诺(如你对q.resolve(“开始”))。

起初,可能需要一段时间来围绕这里发生的事情,但如果你花一点时间通过它,那么它是一个容易的模式,使用任何地方,而无需设置任何机械。

大佬总结

以上是大佬教程为你收集整理的node.js – 如何链接一个可变数量的承诺在Q,按顺序?全部内容,希望文章能够帮你解决node.js – 如何链接一个可变数量的承诺在Q,按顺序?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。