Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 瀑布式异步和等待_Javascript_Asynchronous_Ecmascript 2017 - Fatal编程技术网

Javascript 瀑布式异步和等待

Javascript 瀑布式异步和等待,javascript,asynchronous,ecmascript-2017,Javascript,Asynchronous,Ecmascript 2017,我想用async和Wait实现瀑布 我试过一些手 主要目的是,如果上述任何一个异步函数因错误而被拒绝,我确实希望调用异步函数 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'); }

我想用async和Wait实现瀑布

我试过一些手

主要目的是,如果上述任何一个异步函数因错误而被拒绝,我确实希望调用异步函数

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
2
3
4
第四次之后,它应该会一路破裂。而其余的签约尝试也不应该被取消

所有签名必须以串联方式执行。就像瀑布一样


有什么帮助吗?

您需要更改的两件事:

  • setTimeout函数的参数
  • 使用类似于:wait signin()的命令调用signin函数


不应该是
等待登录()在您的主要功能中,您只需
等待登录。为什么不调用这些函数?如果这很愚蠢,很抱歉,但我刚刚开始异步和等待。即使使用
await-signin()它不在1之后。我不知道,但你的代码根本没有任何意义。
setTimeout(1000*cont,b,'ab')也是错误的。第一个参数是函数,第二个参数是时间(毫秒)。请阅读:仅供参考,
async/await
将成为ES2017的一部分。它不是ES7(ES2016)的一部分。还有一个问题,如果我想将参数传递给signin。。假设第一个签名用“hello world”解析时,第二个签名应将其作为参数读取,并在“second”前面加上前缀,以便第三个签名应将其作为“second hello world”接收。。等等,你能给我一个沙箱吗。。我目前正在做的babel尝试,但在那里我无法找到共享link@codeofnode:
async/await
允许您以同步方式(某种程度上)编写代码:
var result=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()