在异步编程中,es6提供了promise对象的方式。
简单的用法
var promise = new Promise((resolve,reject)=>{
if(){
resolve(res)
}else{
reject(res)
}
})
promise.the((res)=>{}).catch((res)=>{})
而async 实则是返回了一个promise对象
async function test(){
console.log("123");
}
var restult = test();
console.log(result);//=>>Promise{"123"};
//如果函数return 一个直接量,那么就等于直接去调用Promise.resolve()方法
//Promise.resolve方法也就是生成一个Promise实例,并且其直接调用resolve。
//例如
Promise.resolve('test');
//等同于
new Promise((resolve,reject)=>resolve('test'));
//所以async可以理解为生成一个promise实例。
//那么自然也可以去调用.then()
test.then((res)=>{})
await则是配合async使用的。await等于是等待一个返回值,等待async的执行结果。
async function testAsync() {
return Promise.resolve("hello async");
}
async function test() {
const res = await testAsync();
console.log(res);
}
test();
输出结果就是'hello async'.
await必须配合async使用,但是await的对象可以不是Promise对象,一个普通的函数也可以使用。
如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。
如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。但是async函数不会造成阻塞,所以await配合async使用,则没有影响到外部。
async和await的作用
可以把promise 的then写得简洁,便于理解
流程就是生成一个async函数,然后函数内部去await一个promise对象得运行结果,再用这个结果去调用其它得Promise对象,如此得话then((res)=>{}).then((ress)=>{})。就可以写成
var res = await foo();
var ress = await fob(res);
var resss = await foc(ress)
在then链复杂得情况下,promise得参数传递非常复杂,但使用async+await得方式,就如同同步编程一般,非常清晰和流畅。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。