木灵鱼儿
阅读:2478
koa框架3 基础入门之 async、await
async和await可以理解为generator的升级,因为generator需要一个runner库来运行它,这样一来就很麻烦,所有就有了async,其用法差不多。
await后面接异步操作或者同步操作,但是绝对不能为空,然后这个函数function开头接一个async
用法如下:
async function show() {
let user = await $.ajax({
url: "xxx/api",
dataType: "json"
});
let items = null;
if (user.login) {
items = await $.ajax({
url: "xxx/api",
dataType: "json"
});
} else {
if (user.vip) {
items = await $.ajax({
url: "xxx/api",
dataType: "json"
});
} else {
items = await $.ajax({
url: "xxx/api",
dataType: "json"
});
}
}
console.log(items);
};
show();
async的函数可以像普通函数那样调用,极大的方便了代码书写。
awite后面接什么
- promise对象
- 另一个async函数
- 普通函数
- 一个值
但是绝对不能为空。空的话就会报错。
错误处理
如果awite后面报错了,我们怎么处理。
使用了async后,函数变成了同步操作,他没有异步回调了,所以我们只能通过try catch 来进行捕获错误。
async function show() {
try {
let user = await $.ajax({
url: "xxx/api",
dataType: "json"
});
let items = null;
if (user.login) {
items = await $.ajax({
url: "xxx/api",
dataType: "json"
});
} else {
if (user.vip) {
items = await $.ajax({
url: "xxx/api",
dataType: "json"
});
} else {
items = await $.ajax({
url: "xxx/api",
dataType: "json"
});
}
}
} catch (e) {
console.log("出现错误", e);
}
console.log(items);
};
在async函数里面,将所有操作丢在try里面,如果某一处出现错误,catch便会捕获这个错误,从而达到错误提示的效果。
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。

相关推荐
生成器 Generator
简介Promise的出现,我们可以将回调进行反客为主,不在受回调调用者的限制(控制反转和信任问题),但是它并没有解决异步编程导致的代码顺序问题,有没有一种方式,可以让我们的代码虽然是异步的,但是书写顺序却是同步的,这样完全符合我们人类大脑理解方式?console.log("同步的1"); axios({ ... }).then(() => { console.log("异步的回调,如果需要等待结果处理,代码只能写在这个回调里") }); console.log("同步的2")很明显,如果我们希望"同步...
块作用域的代替方案
随着ES6的let和const的声明,我们终于可以创建完整,不受约束的块作用域,但是这个功能终究是新的功能,老设备怎么办呢,它不支持啊!所以我们现在都是使用新的语法,再打垫片(polyfill)去支持新旧设备。那么块级作用域怎么实现旧设备也能用呢?以这段为例:{ let a = 2; console.log(a); // 2 } console.log(a); // ReferenceError分析之前说过的,with和catch,你会发现只能通过使用catch的方式实现这个功能。try { throw 2; } catch (a) { console....
class 与 await结合
class As { constructor() {} then(resolve, reject) { setTimeout(() => { resolve(true); }, 3000) } } (async () => { const b = await new As(); console.log(b); })()
koa教程2 中间件和洋葱模型
koa的中间件通过new出Koa对象的use方法进行注册,每个注册的中间件其实就是一个函数,函数接收两个参数:ctx和next。ctx是上下文对象,是中间件共用的一个对象,也就是共享的对象,我在1中间件对这个ctx添加或者处理内容,再进过2中间件时,可以获取到1所做的所有处理后的结果。next是一个回调函数,他是运行下一个中间件的关键,如果没有next,那么运行就结束在当前中间件中。也正是这个next,才能达到koa所提倡的洋葱模型。const Koa = require("koa"); const app = new Koa(); app.use((ctx, ne...

都覆盖
QQ Browser Windows 10都覆盖