2017-06-22 30 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的結果,您將立即通過計時器標識符值解析承諾。

相關問題