2017-05-20 16 views
1

ジェネレータは、次の結果に進む前に非同期prm約束が完了するのを待たないのはなぜですか?ジェネレータが約束を評価しない

function *verify() { 
    try { 
     let prm = new Promise((resolve,reject) => { 
      resolve("abc"); 
     }) 
     let k = yield prm 
     console.log(k) 
     yield 1; 
     console.log("1") 
     yield 2; 
     console.log("2") 
     yield 3; 
     console.log("3") 
    } catch (err) { 
     console.log("error") 
    } 
} 

var gen = verify() 
while (!gen.next().done) {} 

戻り

undefined 
1 
2 
3 
+1

ジェネレータは約束を待っていません。まだサポートされていない非同期ジェネレータについて考えていますが、あなたはBabelと一緒に使うことができます。 – elclanrs

+1

プロビジョニングは非同期と見なされるため、prmは設定されますが、* anytime *は解決されますが、ブロックされません。 – Booster2ooo

答えて

1

発電ので - 自分自身では - 何のために待機しません。 コールからyieldを送信しただけです。あなたはもちろん、約束が得られたときにnextに再度電話する前に、あなたのループを待つことができます。

あなたが考えているのはasync/awaitです。あなたは書き込みたい

async function verify() { 
    try { 
     let prm = new Promise((resolve,reject) => { 
      resolve("abc"); 
     }) 
     let k = await prm 
     console.log(k) 
     console.log("1") 
     console.log("2") 
     console.log("3") 
    } catch (err) { 
     console.log("error") 
    } 
} 

var prm = verify(); 
+0

ありがとうございました – Stanley

関連する問題