我正在研究YDKJS并回顾Promises章节。
在本节中,它展示了我们如何为当时发生的事情添加同步性:
var p = Promise.resolve( 21 );
p.then( function(v){
console.log( v ); // 21
// create a promise to return
return new Promise( function(resolve,reject){
// introduce asynchrony!
setTimeout( function(){
// fulfill with value `42`
resolve( v * 2 );
}, 100 );
} );
} )
.then( function(v){
// runs after the 100ms delay in the previous step
console.log( v ); // 42
} );
然后说:“那是非常强大的!现在我们可以构建一系列我们想要的多个异步步骤,并且每个步骤都可以根据需要延迟下一步(或不是!)。”
但为什么需要创建新的Promise
?为什么我们不能只返回setTimeout
?当然,它只会在执行超时后继续进行?或者这就是重点,它不是吗?
答案 0 :(得分:1)
或者这就是重点,它不是吗?
是的,setTimeout
确实立即返回,异步执行回调 而不是阻止。 {100}的回调将在100毫秒之前返回then
回调。要使其延迟下一步,您需要从then
回调中返回一个承诺 - setTimeout
不会给我们一个承诺,因此我们需要使用new Promise
显式创建它。
答案 1 :(得分:1)
setTimeout
返回计时器标识符(稍后可在clearTimeout
中使用)。因此,如果您返回setTimeout
的结果,您将立即解决具有计时器标识符值的承诺。