私はasync/awaitがpromiseと連携してどのように機能するかを理解しようとしています。
async function latestTime() {
const bl = await web3.eth.getBlock('latest');
console.log(bl.timestamp); // Returns a primitive
console.log(typeof bl.timestamp.then == 'function'); //Returns false - not a promise
return bl.timestamp;
}
const time = latestTime(); // Promise { <pending> }
私が理解している限り、awaitはブロックする必要があり、上のコードでは、プリミティブbl
を持つオブジェクトtimestamp
を返すことをブロックしているようです。次に、関数はプリミティブ値を返しますが、時間変数はそのプリミティブの代わりに保留中のpromiseに設定されます。何が欠けていますか?
非同期プレフィックスは、Promiseの一種のラッパーです。
async function latestTime() {
const bl = await web3.eth.getBlock('latest');
console.log(bl.timestamp); // Returns a primitive
console.log(typeof bl.timestamp.then == 'function'); //Returns false - not a promise
return bl.timestamp;
}
と同じです
function latestTime() {
return new Promise(function(resolve,success){
const bl = web3.eth.getBlock('latest');
bl.then(function(result){
console.log(result.timestamp); // Returns a primitive
console.log(typeof result.timestamp.then == 'function'); //Returns false - not a promise
resolve(result.timestamp)
})
}
async
関数はとにかくPromise
を返します。戻り値は `Promiseなので、あなたの場合は次のようになります:
async function latestTime(): Promise<some primitive> {
const bl = await web3.eth.getBlock('latest');
return bl.timestamp;
}
したがって、さらに次のような関数を使用できます。
const time = await latestTime();
しかし、async/await
機能ドキュメントを読む方が良いでしょう。