async、await

一、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
相关文章
相关标签/搜索