我想要一个for循环,该循环在每次迭代时调用异步函数。
在for循环之后,我想执行另一个代码块,但在解决for循环中的所有先前调用之前,不要执行。
目前我的问题是,在所有异步调用完成之前执行了for循环之后的代码块,或者根本不执行该代码块。
带有FOR循环的代码部分及其后的代码块(有关完整代码,请参阅fiddle):
[..]
function outerFunction($q, $scope) {
var defer = $q.defer();
readSome($q,$scope).then(function() {
var promise = writeSome($q, $scope.testArray[0])
for (var i=1; i < $scope.testArray.length; i++) {
promise = promise.then(
angular.bind(null, writeSome, $q, $scope.testArray[i])
);
}
// this must not be called before all calls in for-loop have finished
promise = promise.then(function() {
return writeSome($q, "finish").then(function() {
console.log("resolve");
// resolving here after everything has been done, yey!
defer.resolve();
});
});
});
return defer.promise;
}
我创建了一个jsFiddle,可以在http://jsfiddle.net/riemersebastian/B43u6/3/中找到。
目前看来执行顺序很好(请参阅控制台输出)。
我的猜测是,这仅仅是因为每个函数调用都会立即返回,而无需执行任何实际工作。我试图用setTimeout延迟defer.resolve,但是失败了(即最后一个代码块从未执行过)。您可以在小提琴的注释框内看到它。
当我使用写入文件和从文件读取的实函数时,在最后一次写操作完成之前执行了最后一个代码块,这不是我想要的。
当然,该错误可能出在那些读/写功能之一中,但我想验证一下我在此处发布的代码没有问题。
您需要使用的是$
q.all
,它将多个诺言合并为一个诺言,只有当所有诺言都得到解决后才能解决。
在您的情况下,您可以执行以下操作:
function outerFunction() {
var defer = $q.defer();
var promises = [];
function lastTask(){
writeSome('finish').then( function(){
defer.resolve();
});
}
angular.forEach( $scope.testArray, function(value){
promises.push(writeSome(value));
});
$q.all(promises).then(lastTask);
return defer.promise;
}
我正在尝试使用角度构建一个网页。我只需要连接与第一个 ngFor 循环相关的第二个 ngFor 循环的数据。 HTML代码 2019 2018 2017 2016 1月 2月 3月 4月 6月 8月 8月 9月 10月 12月 (每个月和每年的所有数据都应如图所示) 2019 8月8日 - 数据 8月5日-数据 6月28日-数据 1月5日-数据 2018 12月29日-数据 12月21日-数据 1
如果我像下面这样做一个异步调用,如何将它们与promise联系起来,这样我就可以按顺序做事了?在这个例子中,最终发生的是会将项按顺序推入。我更喜欢有promise的回答,但只要有效,什么都行
我试图在for循环中获得for循环,因此输出如下: 我希望输出显示一个正方形 我不知道它为什么不这样做。下面是我的代码:
问题内容: 我有用nodejs编写的代码让我感到困惑 我希望循环内第二个函数中的数据可以推入结果 所以我以前的数据是这样的 像这样 我尝试了几种方法,首先输入命令deferred.resolve();。循环中仅显示1个数据的语句有什么解决方案? 问题答案: 而不是在将立即解决的数组上使用,而是使用它等待一个promise数组: 甚至更好:
问题内容: 我在进行函数调用时试图找到for-each循环的工作方式。请参阅以下代码, 在版本1中,我在for- each循环中调用returnArr()方法,在版本2中,我显式调用returnArr()方法并将其分配给数组,然后对其进行迭代。两种方案的结果都相同。我想知道哪个更有效以及为什么。 我认为版本2会更高效,因为我不会在每次迭代中都调用method。但是令我惊讶的是,当我使用版本1调试代
我想使用useEffect和for-loop生成多个JSX元素,但在本例中没有呈现任何内容。 警告代码:“React Hook useEffect缺少依赖项:”Render InfoCard“。请包含它或删除依赖项数组React-Hooks/EXEXTIVE-DEPS”