2016-08-08 9 views
3

私はasync/awaitで少し苦労してPromiseから値を返します。async/wwaitで約束してくれる

console.log(c()) 

をしかし、これは約束を返すよう明確に私はここでのポイントを逃しています:

function test() { 
    return new Promise((resolve, reject) => { 
    resolve('Hello') 
    }) 
} 

async function c() { 
    await test() 
} 

私は物事を理解できるように、私は実行して値を取得することができるはずです。 "こんにちは"を印刷してはいけませんか?同様の注意で、コールバックを非同期/待機でラップする前に約束事に変換する必要があるかどうかは不明です。

+0

よく、いいえ、async/awaitは非同期コードを同期的に実行させるわけではありません。 async関数の外部のコードは、async関数が完了するのを待たなければなりません。 –

答えて

7

これは約束を返すため、ここではポイントがありません。しないでくださいconsole.log(c())印刷 "こんにちは"?

いいえ、async関数は常に約束を返します。彼らは魔法のように非同期コードを同期的に実行しているわけではなく、逆に、非同期的に実行するコードに変換します(awaitのキーワードにもかかわらず)。

あなたは結果値に内部の非同期関数を得ることができます。

async function c() { 
    const result = await test() 
    console.log(result); 
    return 'World'; 
} 
c().then(console.log); 

を、私は、コールバックが/待って非同期でそれを包む前に、約束に変換する必要があるかどうかについては不明ですか?

はい、awaitとすることができます。変換の方法については、How do I convert an existing callback API to promises?を参照してください。

0

非同期関数はPromiseを返します。関数がエラーをスローすると、 Promiseは拒否されます。関数が値を返す場合、Promise が解決されます。

関連する問題