Node.js 异步操作:使用 async/await 实现代码顺序执行
这段代码中,'Data fetched successfully!' 和 'Data processed successfully!' 几乎同时输出的原因是因为 setTimeout 函数是一个异步操作,在执行到 setTimeout 时会将其放入事件循环队列中,然后继续执行后面的代码。而不会等待 setTimeout 执行完毕再执行下面的代码。
要实现它们先后输出,可以使用 Promise 来包装 setTimeout,并在需要等待的地方使用 await 来等待 Promise 的返回结果。
下面是修改后的代码:
async function fetchData() {
return new Promise(function(resolve) {
setTimeout(function() {
console.log('Data fetched successfully!');
resolve();
}, 2000);
});
}
async function processData() {
return new Promise(function(resolve) {
setTimeout(function() {
console.log('Data processed successfully!');
resolve('Processed data');
}, 2000);
});
}
async function execute() {
await fetchData();
await processData();
}
execute().then(function() {
console.log('Both functions executed successfully!');
});
processData().then(function(processedResult) {
console.log(processedResult);
});
在上面的代码中,通过将 setTimeout 包装成 Promise,并在 setTimeout 内部使用 resolve 来传递结果,从而使得在 await fetchData() 和 await processData() 处等待 Promise 的返回结果,确保了它们先后输出。
原文地址: https://www.cveoy.top/t/topic/qbIt 著作权归作者所有。请勿转载和采集!