Javascript 异步/等待比回调慢
我试图将回调转换为async/await,但发现async/await比现有回调慢得多。有人能看到我的async/await有什么问题吗Javascript 异步/等待比回调慢,javascript,callback,async-await,Javascript,Callback,Async Await,我试图将回调转换为async/await,但发现async/await比现有回调慢得多。有人能看到我的async/await有什么问题吗 for (var i = 0; i < balance; i++) { tokenOfOwnerByIndex().call(i).then((id) => { tokenURI().call(id).then((uri) => { console.log(uri);
for (var i = 0; i < balance; i++) {
tokenOfOwnerByIndex().call(i).then((id) => {
tokenURI().call(id).then((uri) => {
console.log(uri);
});
});
}
for(var i=0;i{
tokenURI().call(id).then((uri)=>{
log(uri);
});
});
}
for(变量i=0;i在第一个版本中,tokenOwnerByIndex
被称为返回承诺。您先通过附加回调,然后通过,循环继续。承诺最终会解决,但for循环早就完成了
当您使用wait时,您将阻塞以下代码,直到承诺得到解决。这意味着在for循环继续之前,必须解析对tokenOfOwnerByIndex
的每个调用
有关示例,请参见我的代码
功能睡眠(毫秒){
返回新承诺((解决)=>{
设置超时(解析,毫秒);
});
}
时间(“承诺”);
设c=10;
for(设i=0;i<10;i++){
睡眠(100)
.然后(()=>{
c--;
如果(c==0){
控制台。时间结束(“承诺”);
}
});
}
控制台时间(“等待”);
(异步()=>{
设c=10;
for(设i=0;i<10;i++){
等待睡眠(100);
c--;
如果(c==0){
console.timeEnd(“等待”);
}
}
})();代码>您正在比较的回调代码是什么?我在代码中没有看到任何计时机制,如何验证一个比另一个慢?您的第一个版本并行调用了tokenOfOwnerByIndex()
多次。你的第二个版本做了系列中的所有事情。你可以这样修复它:ok有意义。所以在这种情况下,我应该坚持回调?如果异步函数不是相互依赖的,那么是的——以并行方式运行它们,这是异步代码的完美用例。您也可以将所有返回的承诺放在一个数组中,并使用一个当前的承诺组合符,如Promise.all
如果您需要解决所有承诺,或者Promise.race
如果您需要在任何承诺被拒绝时退出。或者我在一个JSFIDLE中发布的代码,它只是将等待转换为一个异步立即调用的箭头函数。\uu
在JSFIDLE中紧跟在async之后是什么意思?\u
是一个有效的Javascript标识符,实际上是async arrow函数的参数。如果不需要,可以编写async()=>…
for (var i = 0; i < balance; i++) {
var id = await this.getTokenOfOwnerByIndex(i);
var uri = await this.getTokenURI(id);
console.log(uri);
}