在异步编程中,es6提供了promise对象的方式。
简单的用法es6
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的执行结果。promise
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)=>{})。就能够写成async
var res = await foo(); var ress = await fob(res); var resss = await foc(ress)
在then链复杂得状况下,promise得参数传递很是复杂,但使用async+await得方式,就如同同步编程通常,很是清晰和流畅。异步编程