2017-11-05 2 views
0

タイムアウトの期限が切れる前に、私が「済...」取得しています:タイムアウトの例でPromise.resolve正しい使用方法

Promise.resolve(setTimeout(() => { 
    console.log('print after 3 seconds') 
}, 3000)) 
.then(console.log("done...")) 

// Result: 
// done... 
// print after 3 seconds. 

この他の例では、それが正しいと思われるので、違いは何ですか?それともただの偶然だろう?

Promise 
    .resolve(console.log("print first")) 
    .then(() => { 
     console.log("print second") 
    }) 
// Result: 
// print first 
// print second 

+0

promise.resolve()は、promiseチェーンを進める前に 'setTimeout()'が実行されるのを待たない。適切に行う方法については、[PromiseチェーンのsetTimeoutの使い方](https://stackoverflow.com/questions/39538473/using-settimeout-on-promise-chain)を参照してください。実際には、あなたの質問は恐らくそれの複製であり、そのように閉じられることができます。 – jfriend00

答えて

0

Promiseの使用が間違っている場合は、setTimeoutの最後のケースでは、新しいPromiseを作成し、ロジックが必要なときにresolve関数を呼び出す必要があります。

new Promise((resolve, reject) => { 
    setTimeout(() => { 
    console.log('print after 3 seconds'); 
    resolve(); 
    }, 3000); 
}) 
.then(console.log("done...")) 
+0

そして2番目の例では正しいのですか? –

+0

2番目の例は誤って "うまくいきます"というのは、定義で 'console.log'を呼び出しているため、' then'コールバックは常に「別の」イベントループになりますので、最初のconsole.log – felixmosh

0

Window.setTimeoutはPromiseを返しません。設定されているタイマーのID値を表すA Numberを返します。この値をclearTimeout()メソッドと共に使用して、タイマーをキャンセルします。

はsetTimeoutを仕上げは、3秒が経過していないときは、理由は行わ得ているhttps://www.w3schools.com/jsref/met_win_settimeout.asp

を参照してください。

関連する問題