js async的常用方式

访客4年前黑客资讯305

async函数是Generator 函数的语法糖,async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。

async函数对Generator 函数的改善点有以下几点:

内置执行器,不需要像Generator 函数要去挪用next()才能让函数执行
更好的语义化
返回的是promise工具


返回promise工具

async函数返回一个 Promise 工具。async函数内部return语句返回的值,会成为then方式回调函数的参数。async函数内部抛失足误,会导致返回的 Promise 工具变为reject状态。抛出的错误工具会被catch方式回调函数接收到

下面见例子:

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}`);
})

任何一个await语句后面的 Promise 工具变为reject状态,那么整个async函数都市中止执行。

async function f() {
  await Promise.reject('失足了');
  await Promise.resolve('hello world'); // 不会执行
}
// 第二行的promise语句不会执行

针对这种情形,有时候我们希望前面的异步函数执行失败后,也不要影响后面的代码执行,这时候就可以用try-catch和promise的catch处置异常,不至于让后面的程序不执行

await后面的异步操作失足,那么等同于async函数返回的 Promise 工具被reject,以是更好把await下令放在try...catch代码块中  
// 之一种方式
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');
}

若是多个await下令后面的异步操作,若是不存在继发关系,更好让它们同时触发。

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;
// 同时触发,缩短程序运行时间

await下令只能用在async函数之中,若是用在通俗函数,就会报错。

async function dbFuc(db) {
  let docs = [{}, {}, {}];

  // 报错
  docs.forEach(function (doc) {
    await db.post(doc);
  });
}
思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

返回列表

上一篇:RemoveBG

下一篇:progress.js

相关文章

北京高端儿经纪人在线预约价格方式【赵婵】

今天给大家分享的内容是“北京高端小学妹经纪人在线预约价格方式【赵婵】”,我是赵婵,来自成都市,今年29岁,作为职业:济南伴游,我热爱我的职业:济南伴游。三圍:胸62腰94臀61 鞋碼:36,呆猴的伴游...

科考队员南海寻鲸记:主要依靠人眼和望远镜

科考队员南海寻鲸记:主要依靠人眼和望远镜

“铃!铃!”清晨6点30分,两声急促的警铃,惊醒了睡梦中的科考队员。甲板上传来惊呼:“一大群热带斑海豚!估计超过100头了!” 7月20日在南海某海域拍摄的弗氏海豚。新华社记者张丽芸摄 大家迅...

黑客网站帮我找一个老賴,黑客软件 停车场治理,外国黑客装逼网站

称呼从正常指令倒推发生混杂的音频指令(如一段人类无法识别的噪音),然后在三星Galaxy S4以及iPhone 6上面被准确识别为相对应的语音指令,变为让手机切换飞翔形式、拨打等。 self.fpt...

东北人打架原因(东北人为什么爱打架)

东北人打架原因(东北人为什么爱打架)有一次,我的一个南方朋友问我:“东北人为什么爱打架?”东北人打架的频率超出了正常范围 有一次,我的一个南方朋...

麦克风电流声怎么消除?教你一键解消除电流麦

麦克风电流声怎么消除?教你一键解消除电流麦

声音是个奇妙的东西,我们所听到的不同的声音,是由我们周围空气的微小压着产生的,奇妙之处就在于,空气竟然能将这些压的如此美好、真实的传输相当长的距离。   麦克风,是由声音的振动传到麦克风的振膜上,...

稚优泉口红安全吗

最近非常火爆的国货彩妆品牌,被遭到了众多疑问,有很多网友质疑稚优泉的口红安全吗,小编在这里也说一句,有绝对安全的东西吗,任何事情都没有绝对性,稚优泉的口红还是相当安全的,毕竟口碑在那里摆着,大家都是有...