为什么我们不能单独返回timeOut而不是创建一个新的Promise?

时间:2017-06-22 13:38:07

标签: javascript promise

我正在研究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?当然,它只会在执行超时后继续进行?或者这就是重点,它不是吗?

2 个答案:

答案 0 :(得分:1)

  

或者这就是重点,它不是吗?

是的,setTimeout确实立即返回,异步执行回调 而不是阻止。 {100}的回调将在100毫秒之前返回then回调。要使其延迟下一步,您需要从then回调中返回一个承诺 - setTimeout不会给我们一个承诺,因此我们需要使用new Promise显式创建它。

答案 1 :(得分:1)

setTimeout返回计时器标识符(稍后可在clearTimeout中使用)。因此,如果您返回setTimeout的结果,您将立即解决具有计时器标识符值的承诺。