Abh*_*pta 4 javascript asynchronous node.js async-await typescript
所以我在想ok节点是异步的(意味着多行代码同时执行),那么为什么我们使用关键字async(字面意思是异步)来等待关键字await来完成任务(也就是使它是同步的)。为什么没有关键字sync,因为这就是我们正在做的事情?有人可以解释一下关键字 async 的逻辑吗?我感到很困惑。
该async关键字允许使用await它只是一种更简化的语法,用于编写带有 Promise 和异步操作的代码。它不会使任何东西同步。它只是允许您使用与同步代码类似的编程技术,但它仍然是异步的。
有人可以解释一下关键字 async 的逻辑吗?我感到很困惑。
当您使用async关键字声明函数时,您正在创建一种始终返回承诺的不同类型的函数。这仅对异步编程有用 - 因此async关键字与术语“异步”的联系。
此外,该async关键字不会使任何内容同步。它确实允许您使用更类似于同步的编程模型,该模型使用起来要简单得多,特别是对于异步控制流中的条件分支之类的事情,但异步的东西实际上不会变成同步。
作为如何实现同步的示例,请在代码片段中运行此示例并记下console.log()语句的顺序。该async函数在命中第一个时返回,await其余部分继续执行,异步操作仍在进行。这是一个带有计时器的模拟,但该计时器可以是任何其他异步操作,例如 http 请求、数据库操作等......
function delay(t) {
return new Promise(resolve => {
setTimeout(resolve, t);
});
}
async function run() {
console.log("in run() 1");
await delay(100);
console.log("in run() 2");
}
console.log("before run()");
run();
console.log("after run()");Run Code Online (Sandbox Code Playgroud)
run()通过运行这个小示例,您可以看到,一旦您点击了该函数,它的执行就会暂停await,并且它会返回,允许函数调用后的其他代码运行。然后,过了一段时间,当计时器触发并且delay()承诺得到解决时,run()函数就会从暂停的位置开始执行函数体的其余部分。
这在操作上与使用and.then()代替的此代码相同:asyncawait
function delay(t) {
return new Promise(resolve => {
setTimeout(resolve, t);
});
}
function run() {
console.log("in run() 1");
delay(100).then(() => {
console.log("in run() 2");
});
}
console.log("before run()");
run();
console.log("after run()");Run Code Online (Sandbox Code Playgroud)