这篇文章是让大家更好理解 nodejs的async 和await 以及promise, 其实await状态虽然是在你需要的步骤里面是同步的,但是整个系统状态是异步的,是异步里面的同步,无需担心系统性能问题。看实例就明白了。
var x = 100;
async function myfunc(param) {
return new Promise((resolve, reject) => {
// 模擬
setTimeout(() => {
param += 200;
resolve(param);
}, 1000);
})
}
async function myfunc2() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('myfunc2');
}, 1000);
});
}
async function test() {
await myfunc2();
console.log('the one step');
let result = await myfunc(x);
console.log(result);// 两秒之后会被打印出来
}
test();
以上输出
$ node testcache.js the one step 300 看起来是同步的,没问题,那么是否阻塞呢? 加上以下语句
for(var i =0;i {
setTimeout(() => {
if(1)
resolve(param);
else
reject(0);
}, second);
})
}
async function test2() {
let result1 = await sleep(2000, 'step1');
let result2 = await sleep(1000, 'step2' + result1);
let result3 = await sleep(500, 'step3' + result2);
console.log(result3,result2,result1);
}
test2();
会按照你需要的输出
错误处理方式async function errorProcess() {
try {
let result = await sleep(1000);
console.log(result);
} catch (err) {
console.log(err);
}
}
reject会捕获到catch里面,自行处理就好