2017-09-12 5 views
0

私は、新しいasync/awaitキーワードで約束がどのように働くのかを学び、理解していますが、紛らわしいことがあります。この記事でpromise async waiting with without callback

https://davidwalsh.name/async-await

それはasyncawait doesntのを使用して、コールバック、例えば、使用する1つを必要とすることを言います:私たちは最初のタイムアウトを定義する必要がある1つは、それをテストしたい場合

async function parallel(callback) { 
    const wait1 = wait(500); 
    const wait2 = wait(500); 
    await wait1; 
    await wait2; 
    callback([wait1, wait2]); 
} 

waitとしての役割を果たす機能:

var wait = function(time) { 

    return new Promise(function(resolve, reject) { 

     setTimeout(function() { 
      resolve(Math.random() * time); 
     }, time); 

    }); 

}; 

、最終的に我々は何かトンを必要としますO私たちのparallel関数を呼び出して値を読み取る: - :

async function parallel(callback) { 
    var wait1 = wait(500).then(function(data) { 
        wait1 = data; 
       }); 
    var wait2 = wait(500).then(function(data) { 
        wait2 = data; 
       }); 
    await wait1; 
    await wait2; 
    callback([wait1, wait2]); 
} 

parallel(function(data) { 
    console.log('data', data); 
}); 

問題は、あなたが値を読み取る場合ということです、彼らは約束されていることはこれを行うことができ、その問題を解決するために、代わりに実際の値のオブジェクトhttps://jsfiddle.net/jp3g2q5k/

しかし、あなたは私が.thenコールバックを使用しなければならなかった理由を私は理解して助けることができる:

今では、ここでのデモを動作しますか?それはコールバック自由な状況であると仮定します。あるいは、誰かがこのコードをコールバックなしで動作するように変更する方法を知っているかもしれません。

答えて

1

あなたは 'await'キーワードで約束を解決しています。あなたの例では:

const result1 = await wait1; 
const result2 = await wait2; 
callback([result1 , result2 ]); 
+0

これは問題を解決します、ありがとうございます;) – Mevia