async await一些问题

写在前面

async await只与promise结合使用,mongoose内置promise,所以,才可以使用sql语句,
let list = await userinformation.find()可以看成两步,多个await之间是同步的,(两步)数据库查询数据、查询后的结果赋值给list(赋值本来就是同步)都是同步。

问题

昨天在写毕业设计的时候,在map循环中无法使用await,进而牵扯出一系列的问题。

  1. map中无法使用await,原因是什么?forEach是否可以?for循环是否可以?

    因为map和forEach都是函数,async函数里面必须是await
    for循环和for of是可以的,因为他们不是函数
    
  2. 多个await之间是同步,是否有阻塞现象发生?

    会有阻塞现象
    
     async function foo() {
           
        var a = await new Promise((resolve) => {
           
          setTimeout(() => {
           
            resolve(1);
          }, 2000);
        });
        console.log(a); // 第2秒时输出: 1
    
        try {
           
          var b = await new Promise((resolve, reject) => {
           
            setTimeout(() => {
           
              reject(2);
            }, 1000);
          });
        } catch (e) {
           
          console.log(e); // 第3秒时输出: 2
        }
    
        // 函数暂停2秒后再继续执行
        var sleep = await new Promise((resolve) => {
           
          setTimeout(() => {
           
            resolve("sleep");
          }, 2000);
        });
    
        var c = await 3;
        console.log(c); // 第5秒时输出: 3
      }
    
      foo();
    
  3. await查询数据库会造成阻塞吗?mongoose有针对查询数据库超时的解决方案吗?

    会  暂时没有,mongoose查询数据库是异步的,是不造成阻塞的,只不过和await结合造成同步阻塞。
    
  4. await请求网络超时会造成阻塞吗?会阻塞的话有解决方案吗?

    会  没有,网络请求都是异步的,但是和async await一起使用,就会造成同步阻塞
    
  5. await每次都需要try catch来捕捉异常?有没有什么解决方案?

    每次都需要,没有
    
  6. await语法错误,会终止程序吗?请求或查询超时错误呢?

    会终止,所以要使用 try..catch,使得下面的程序接着运行
    
    请求或查询错误超时,会终止,要使用 try..catch,使得下面的程序接着运行
    

await后面跟的一定是个promise对象

你可能感兴趣的:(async,await,es7)