Man*_*Man 3 javascript asynchronous v8 node.js
我的问题是如何在 node.js 或 v8 环境中执行等待函数结果。
我们知道,node.js 是单线程非阻塞 I/O 环境。
什么是内部代码及其工作原理?
异步函数示例:
async function asyncCall() {
// `getCreditorId` and `getCreditorAmount` return promise
var creditorId= await getCreditorId();
var creditAmount=await getCreditorAmount(creditorId);
}
Run Code Online (Sandbox Code Playgroud)
如果执行此函数,则首先等待 CreditorId,然后使用 CreditorId 调用 getCreditorAmount,并再次仅在此异步函数中等待 Creditor Amount。
而不是异步函数,其他执行不等待,效果很好。
如果在这个例子中使用 Promise
getCreditorId().then((creditorId)=>{
getCreditorAmount(creditorId).then((result)=>{
// here you got the result
})
});
Run Code Online (Sandbox Code Playgroud)
我的假设是,如果 async wait 在内部使用 Promise,那么 async 必须知道 getCreditorAmount 函数中使用哪个变量作为参数。
它怎么知道的?
也许我的问题毫无价值?如果它有答案那么我想知道答案。
感谢帮助。
async-await 使用 Generator 来解析并等待 Promise。
await在 async-await 中是异步的,当编译器到达 wait 时,它会停止执行并将所有内容推送到事件队列中,并在 async 函数之后继续执行同步代码。例子
function first() {
return new Promise( resolve => {
console.log(2);
resolve(3);
console.log(4);
});
}
async function f(){
console.log(1);
let r = await first();
console.log(r);
}
console.log('a');
f();
console.log('b');
Run Code Online (Sandbox Code Playgroud)
由于等待是异步的,因此等待之前的所有其他事情都会照常发生
a
1
2
4
b
// asynchronous happens
3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4103 次 |
| 最近记录: |