2017-06-22 67 views
1

我正在通过YDKJS和审查承诺章节。为什么我们不能自己返回timeOut而不是创建新的Promise?

在本节中,它显示我们如何才能增加同步到正在发生的事情,当时:

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

@Pointy,no,setTimeout返回一个标识符,它可以在clearTimeout中使用。 –

+0

@YuriyYakym当然哦;需要更多的咖啡我想:) – Pointy

回答

1

或者是整点,它不?

是,setTimeout并立即返回,执行回调异步而不是堵。 then回调将在这100ms过去之前返回。为了推迟下一步,您需要返回then回调中的承诺 - 而setTimeout不会给我们一个,所以我们需要使用new Promise明确创建它。

1

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

相关问题