您可以保留一个计数器并在方法的回调中增加它,仅当计数器达到数组的长度时才调用您的done
回调。
var a = ['url1', 'url2', 'url3'];
var op = [];
cb = (callback) => {
for (var i = 0; i < a.length; i++) {
gtts.savetos3(`${a[i]}.mp3`, a[i], 'ta', function(url) {
console.log(url['Location']);
op.push(url['Location']);
});
}
callback()
}
cb(() => {
console.log(op);
})
在上面的代码中,gtts.savetos3是异步函数。完成数组中每个元素的执行都需要花费大量时间。由于异步功能,我无法打印完整的数组op数组中的url,因为它会打印一个空数组。
gtts.savetos3函数使用正确的URL调用给定的回调,以便我可以使用console.log
打印输出,但是当循环时,我就搞砸了。
我的问题是
预先感谢...!
var a = ['url1','url2','url3']; var op = []; cb =(回调)=> {for(var i = 0; i
您可以保留一个计数器并在方法的回调中增加它,仅当计数器达到数组的长度时才调用您的done
回调。
cb = (done) => { let counter = 1; for (let i = 0; i < a.length; i++) { gtts.savetos3(`${a[i]}.mp3`, a[i], 'ta', function (url) { console.log(url['Location']); op.push(url['Location']); counter++ }); } if(counter === a.length) { done(); } } cb(() => { console.log(op); })
这仅是在没有
Promises
或任何第三方模块的情况下解决问题的方法,而不是简洁或正确的方法。
您可以保留一个计数器并在方法的回调中增加它,仅当计数器达到数组的长度时才调用您的done
回调。