在循环内进行异步调用,直到找到一个值

时间:2015-08-16 00:17:12

标签: javascript asynchronous ecmascript-5

我尝试在循环内对异步API进行多次调用,直到返回我想要的值(在这种情况下为add r21, r25 adc r22, r26 adc r23, r27 adc r24, r28 )。问题是我不想在找到该值后继续循环,并且我不想在循环之后执行这些行而没有返回它的值...但到目前为止我可以&#39得到那个工作。我想我在这里做错了什么,但是"我无法全面了解情况"。

true

1 个答案:

答案 0 :(得分:1)

你试过Kriskowal's Q吗?有一个很好的函数叫Q#allSettled

Q.allSettled(promises)
.then(function (results) {
    results.forEach(function (result) {
        if (result.state === "fulfilled") {
            var value = result.value;
        } else {
            var reason = result.reason;
        }
    });
});

所以基本上这就是它在你的情况下的工作方式:

var promises = [];

for(/* conditions */) {
  promises.push(/* async call which returns a promise */);
}

Q.allSettled(promises).then(function(results) {
    results.forEach(function (result) {
        var value;

        if (result.state === "fulfilled") {
            value = result.value;

            // do something with "value"
        }
    });
});

allSettled只是确保then将被执行,无论承诺是否成功,您都可以检查从异步调用中检索的对象的值。