【发布时间】:2020-07-26 11:29:17
【问题描述】:
以下代码
function doSomething(msg){
return new Promise((resolve, reject) => {
setTimeout(
() => {
console.log(msg);
resolve();
},
2000);
})
}
let start = Date.now();
let end;
doSomething("1st Call")
.then(()=>doSomething("2nd Call"))
.then(()=>doSomething("3rd Call"))
.then(()=>{
end = Date.now();
console.log('start',start);
console.log('end',end);
console.log('elapsed time',end-start);
})
按预期打印第一个呼叫,第二个和第三个,每个 console.log 语句之间间隔 2 秒
但是,如果我从 then 块中删除箭头函数,则行为完全不同,即
doSomething("1st Call")
.then(doSomething("2nd Call"))
.then(doSomething("3rd Call"))
.then(()=>{
end = Date.now();
console.log('start',start);
console.log('end',end);
console.log('elapsed time',end-start);
})
使用此代码,所有 console.log 语句同时打印,经过的时间仅为 2 秒,而不是每个函数 2 秒(如第一个示例中总共 6 秒)
换句话说,为了让代码正常工作,then 函数需要接受一个函数(在本例中为箭头),然后我可以从该函数内部进行进一步的函数调用。
为什么不能直接传函数,为什么要嵌套在另一个函数中?
【问题讨论】:
标签: javascript asynchronous promise es6-promise