1. 看代码,说输出
new Promise((resolve, reject) => {
for(let i = 0; i < 3; i++){
resolve(i);
console.log(i);
}
}).then(data => console.log(data));
// 输出是:
// 0
// 1
// 2
// 0 2. async await 怎么处理错误
async await 从语法层面给人一种非常直观的方式,可以让我们避免 callback hell 与 Promise hell.
async function getUserInfo(){
const id = await request.getCurrentUserId();
const info = await request.getUserInfo(id);
return info;
}但是,每一步 await 都可能出错,为了捕获这些错误,我们使用 try...catch...
async function getUserInfo(){
try{
const id = await request.getCurrentUserId();
} catch(e){
return cb('an error in getCurrentUserId');
}
try{
const info = await request.getUserInfo(id);
}catch(e){
return cb('an error in getUserInfo');
}
return cb(null, info);
} 这样的代码丑陋且不直观,因为 await 返回的是一个 Promise,因此可以使用一个函数包装一个来符合 error first 的原则,从而避免 try...catch...
function to(promise){
return promise.then(data => {
return [null, data];
}).then(err => [err]);
} 通过这个函数包装一下上面的例子
async function getUserInfo(){
let err, id, info;
[err, id] = await to(request.getCurrentUserId());
if(err){
return console.error(err);
}
[err, info] = await to(request.getCurrentUserInfo());
if(err){
return console.error(err);
}
return info;
} 
京公网安备 11010502036488号