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