let testAsync = async function () { // throw new Error('抛出一个错误~'); reject() }; testAsync().then(resolve => { console.log(`resolve: ${resolve}`); }, reject => { console.log(`reject: ${reject}`); // 状态变化成reject的回调函数会执行,若是这里没有回调函数,则catch会捕获,这就是promise的东西了 }).catch(err => { console.log(`err: ${err}`); })
async function f() { await Promise.reject('出错了'); await Promise.resolve('hello world'); // 不会执行 } // 第二行的promise语句不会执行
await后面的异步操做出错,那么等同于async函数返回的 Promise 对象被reject,因此最好把await命令放在try...catch代码块中promise
// 第一种方式 async function f() { try { await Promise.reject('出错了'); } catch (err) { } return await Promise.resolve('hello world'); } // 第二种当时,用catch来处理前面异步的异常状况 async function f() { await Promise.reject('出错了').catch(err => { console.log(err); }) return await Promise.resolve('hello world'); }
let foo = await getFoo(); let bar = await getBar(); // 写法一 let [foo, bar] = await Promise.all([getFoo(), getBar()]); // 写法二 let fooPromise = getFoo(); let barPromise = getBar(); let foo = await fooPromise; let bar = await barPromise; // 同时触发,缩短程序运行时间
async function dbFuc(db) { let docs = [{}, {}, {}]; // 报错 docs.forEach(function (doc) { await db.post(doc); }); }