大佬教程收集整理的这篇文章主要介绍了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,请注明来意。