瀑布与异步和等待

时间:2017-05-29 10:07:37

标签: javascript asynchronous ecmascript-2017

我想用异步和等待来实现瀑布。

我经历了this尝试了一些手

主要目的是如果以上异步中的任何一个拒绝错误,我想要调用异步函数。

map2

在上面,没有任何工作按预期进行。 我期望的输出输出是什么

var cont = 1;

function signin (){
  console.log(cont);
  // i am doing some async
  return new Promise((a,b)=>{
    if((++cont) === 4){
      setTimeout(1000*cont,b,'ab');      
    } else {
      setTimeout(1000*cont,a,'ab');
    }
  })
}

async function main() {
  try {
    await signin;
    await signin;
    await signin;
    await signin;
    await signin;
    await signin;
    await signin;
    return signin();
  } catch(er){
    return er;
  }
}

main()

第四次之后应该一路破裂。其他尝试登录的行为不应该被召唤。

所有登录必须连续执行。就像瀑布一样。

任何帮助?

1 个答案:

答案 0 :(得分:0)

你需要改变的两件事:

  • setTimeout函数的参数
  • 使用paranthesis调用signin函数,例如:await signin()

      var cont = 1;
      function signin (){
      console.log(cont);
      // i am doing some async
      return new Promise((resolve, reject)=>{
        if((++cont) === 4){
          setTimeout(reject(cont),1000*cont);
        } else {
          setTimeout(resolve(cont),1000*cont);
        }
      })
    }
    
    async function main() {
      try {
        await signin();
        await signin();
        await signin();
        await signin();
        await signin();
        await signin();
        await signin();
        return signin();
      } catch(er){
        console.log("error: " +cont);
        return er;
      }
    }
    
    main()