2017-02-14 11 views
0

私は、非同期の概念とjsの約束の周りに私の頭を包み込むのに苦労しています。私は以下のコードが私のコンソールに何も印刷しない理由を理解できません。Javascript PromiseとAsync code

私のPromiseのコードは非同期ではありませんが、約束のポイントではないので、私はそれを前提としています。同期するものを非同期にするには?

そうでない場合、js関数(setTimeOutなど)を組み込むことなく、同期コードを非同期に「変換」するにはどうすればよいですか?

function countdown(seconds) { 
    return new Promise(function(resolve, reject) { 
     for (let i = seconds; i >= 0; i--) { 
      if (i > 0) console.log(i + '...'); 
      else resolve(console.log("GO!")); 
     } 
    } 
}; 
count = countdown(5).then(() => console.log('Completed'), (err) => console.log(err.message)); 
+0

"約束のポイントではありません:同期を非同期にする* *"いいえ、絶対にありません。 [約束のポイント](http://stackoverflow.com/a/22562045/1048572)は、すでに非同期のものを返すことができる値として扱うことで、それらを扱うことです。あなたの例では、同期ループがあり、ここに約束を使用する理由はありません。 – Bergi

+0

'以下のコードが私のコンソールに何も印刷しないのはなぜですか? '紛失したことについてのエラーでもない ')'?より良いブラウザを使用してください –

+0

その性質上、javascriptは同期です(抗議の鳴き声を待つ)...非同期である任意の(ネイティブではない)関数は、その関数に直接起因するか、間接的に "ネイティブ"関数つまり、非同期である - したがって、あるコードを同期から非同期に変換する*唯一の方法は、本質的には非同期である多くの "ネイティブ"関数の1つを使用することです(直接、または間接的に、これらの非同期関数のうちの1つを直接呼び出します) –

答えて

2

どのように私は本当に同期を "変換" 可能性をチェックすることを追加した後に動作するようになりました組み込みのjs関数(setTimeOutなど)を使用せずにasyncにコード化しますか?

それは自然のことで、javascriptのコードは(和らげるために抗議の遠吠えを待ち) ...

非同期であるすべての(非ネイティブ)関数は、その関数が原因で、同期していますどちらか

  1. は、直接、最終的に1 O呼び出しなどの機能を呼び出す他の関数を呼び出して、それらの非同期のネイティブ機能の一つ、または
  2. を呼び出しますこれらの非同期関数F直接

非同期に同期から一部のコードを変換する唯一の方法は、他の機能を介して、再度、直接的に、または間接的に本質的に非同期である多くの「ネイティブ」機能(のいずれかを使用することです最終的にこれらの非同期関数の1つを直接呼び出さなければなりません)

2

それは)が欠落している、そしてそれはカッコ...ランスニペットは

function countdown(seconds) { 
 
    return new Promise(function(resolve, reject) { 
 
     for (let i = seconds; i >= 0; i--) { 
 
      if (i > 0) console.log(i + '...'); 
 
      else resolve(console.log("GO!")); 
 
     } 
 
    }) // <---⚠️ I mean this parenthesis 
 
}; 
 
count = countdown(5).then(() => console.log('Completed'), (err) => console.log(err.message));

+0

私はそれを見ると笑いを止めることができません。笑 –

+0

私はあなたに本当にうれしいです...これは面白い答えを書くのは良いです。 –

+1

リンターが...よくありがとう! – user3682983