2017-06-22 3 views
1

私はYDKJSを通して働いており、約束の章を見直しています。このセクションでは新しいPromiseを作成するのではなく、自分自身でtimeOutを返すのはなぜですか?

、それは我々が、その後に何が起こっているのかに同期を追加する方法を示しています。

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の結果を返すと、すぐにタイマー識別子の値で約束を解決します。

関連する問題