一、async 函数返回一个Promise对象promise
onLoad: function (options) { async function list(){ return 'aaa' } console.log(list()) },
输出异步
Promise {<resolved>: "aaa"}
二、await 就是异步等待,后面应该跟一个Promise对象,若是不是Promise对象,那么会被转成一个当即 resolve 的Promiseasync
三、await 等待的是一个Promise对象,会将Promise对象的resolve状态的值返回,而不是返回Promise对象函数
onLoad: async function (options) { const aa = await this.promise1() //没有await console.log(aa) }, promise1(){ return new Promise((resolve, reject) => { resolve('aaaa') }) },
输出 Promise对象this
Promise {<resolved>: "aaaa"}
onLoad: async function (options) { const aa = await this.promise1() //有await console.log(aa) }, promise1(){ return new Promise((resolve, reject) => { resolve('aaaa') }) },
输出 Promise对象resolve的值spa
aaaa
四、程序中只要有Promise对象返回reject状态,就会抛出异常,有await(等待一个异常)会阻止下边代码的执行,没有await下边代码会正常执行(最后再抛出异常)code
异常最后抛出;异常中会附带reject的值;会抛出多个异常,若是存在多个reject状态的Promise对象
对象
onLoad: async function (options) { const aa = await this.promise1() //没有await console.log(aa) }, promise1() { return new Promise((resolve, reject) => { reject('aaaa') }) },
最后抛出异常,没有await,下边程序正常执行blog
Promise {<rejected>: "aaaa"} Uncaught (in promise) aaaa
五、await 等待的Promise对象返回了reject状态,程序就会抛出异常,await后边的程序不会执行it
onLoad: async function (options) {
const aa = await this.promise1() console.log(aa) }, promise1() { return new Promise((resolve, reject) => { reject('aaaa') }) },
程序抛出异常,有await,await下边的程序不会执行
Uncaught (in promise) aaaa
六、await并非等待他里边的代码执行完成以后,才执行下边的代码, await的意思迟早会执行,只是遇到等待的promise对象返回reject状态时,await后边的代码才不会执行
function testSometing() { console.log("执行testSometing"); return "testSometing"; } async function testAsync() { console.log("执行testAsync"); return Promise.resolve("hello async"); } async function test() { console.log("test start..."); const v1 = await testSometing();//关键点1 console.log(v1); const v2 = await testAsync(); console.log(v2); console.log(v1, v2); } test(); var promise = new Promise((resolve)=> { console.log("promise start.."); resolve("promise");});//关键点2 promise.then((val)=> console.log(val)); console.log("test end...")
输出结果
test start... 执行testSometing promise start.. test end... testSometing 执行testAsync promise hello async testSometing hello async