Javascript 解决未按预期工作的承诺
我想使用async/await运行Javascript 解决未按预期工作的承诺,javascript,Javascript,我想使用async/await运行console.log('proccess-Ends')函数解析后的更新向导 类似下面的代码: tutor(); 异步函数tutor(){ console.log('tutor函数已启动..'); //等待updateGuider函数解析 等待更新向导(“默认”); //预期的结果是在updateGuider解析后到达这一行,但我们到目前为止还不能! console.log('proccess Ends'); } 函数更新向导(状态){ 返回新承诺((解析)=
console.log('proccess-Ends')代码>函数解析后的更新向导
类似下面的代码:
tutor();
异步函数tutor(){
console.log('tutor函数已启动..');
//等待updateGuider函数解析
等待更新向导(“默认”);
//预期的结果是在updateGuider解析后到达这一行,但我们到目前为止还不能!
console.log('proccess Ends');
}
函数更新向导(状态){
返回新承诺((解析)=>{
如果(状态==“完成”){
log('updateGuider已解析!');
解决();
}
开关(状态){
“默认”情况:
说();
打破
}
});
}
异步函数speak(){
setTimeout(函数(){
//5秒钟后,我们从speak函数解析updateGuider
updateGuider('done')
},5000)
}
每次调用updateGuider时,您都会返回不同的承诺。严格来说,您不能像这样解析UpdateGuide。另外,除非您在异步函数中等待某个内容,否则它不会执行任何操作,所以说,目前没有异步的理由。这并不完美,但你可以理解问题的要点
function updateGuider(state){
return new Promise((resolve) => {
if(state == 'done'){
console.log('updateGuider has been resolved!');
resolve();
}
switch(state) {
case 'default':
speak(resolve);
break;
}
});
}
function speak(resolve){
setTimeout(function(){
//after 5 seconds we resolve the updateGuider from speak function
resolve()
},5000)
}
每次调用updateGuider时,您都会返回不同的承诺。严格来说,您不能像这样解析UpdateGuide。另外,除非您在异步函数中等待某个内容,否则它不会执行任何操作,所以说,目前没有异步的理由。这并不完美,但你可以理解问题的要点
function updateGuider(state){
return new Promise((resolve) => {
if(state == 'done'){
console.log('updateGuider has been resolved!');
resolve();
}
switch(state) {
case 'default':
speak(resolve);
break;
}
});
}
function speak(resolve){
setTimeout(function(){
//after 5 seconds we resolve the updateGuider from speak function
resolve()
},5000)
}
我不确定您认为这段代码中发生了什么——您认为再次调用speak
和updateGuider
会解决最初返回的承诺或其他问题吗?我就是这么想的!如何从speak
解析updateGuider
??将解析函数传递给它?请解释一下。。。通过什么?你的问题是,当你可以在超时时间updateGuider('done')
时,你正在创建一个新的承诺(而不是像你想象的那样,更新旧的承诺)。这可以通过在updateGuider
函数中使用speak(resolve)
来解决,将其更改为function speak(resolve)
并调用resolve()
而不是updateGuider('done')
。这样你原来的承诺就会得到解决。我不确定你认为这段代码中发生了什么——你认为再次调用speak
和updateGuider
会解决原来返回的承诺吗?我就是这么想的!如何从speak
解析updateGuider
??将解析函数传递给它?请解释一下。。。通过什么?你的问题是,当你可以在超时时间updateGuider('done')
时,你正在创建一个新的承诺(而不是像你想象的那样,更新旧的承诺)。这可以通过在updateGuider
函数中使用speak(resolve)
来解决,将其更改为function speak(resolve)
并调用resolve()
而不是updateGuider('done')
。这样,您原来的承诺就会得到解决。您知道,每次调用updateGuider时,您都会返回一个新的承诺。让我强调一下这个新的关键词:)因此,如果你不把它称为inside speak,但你传递第一个promise的resolve方法,你就可以控制它。确切地说:1stPromise=newpromise((解析,拒绝)=>{…})2ndPromise=newpromise((解析,拒绝)=>{…})这两种解析方法是不同的。但是在任何承诺体中,您都可以将引用传递给它自己的解析方法,并随时调用它。这就是你打电话给speak(resolve)时所做的。你看,每次打电话给updateGuider,你都会返回一个新的承诺。让我强调一下这个新的关键词:)因此,如果你不把它称为inside speak,但你传递第一个promise的resolve方法,你就可以控制它。确切地说:1stPromise=newpromise((解析,拒绝)=>{…})2ndPromise=newpromise((解析,拒绝)=>{…})这两种解析方法是不同的。但是在任何承诺体中,您都可以将引用传递给它自己的解析方法,并随时调用它。这就是你打电话给speak(resolve)时所做的