Javascript Async/await是如何工作的,为什么在这里不工作
我一直在试图理解async/await是如何工作的,我只想让它等待,直到返回值。然而,我无法通过回调、承诺或Javascript Async/await是如何工作的,为什么在这里不工作,javascript,node.js,Javascript,Node.js,我一直在试图理解async/await是如何工作的,我只想让它等待,直到返回值。然而,我无法通过回调、承诺或async/await实现这一点。我做错了什么,为什么async/await不能像我期望的那样工作?(等待运行其他代码,直到此承诺得到解决) 许多问题都像这一个链接到“介绍页”。我都读过了,我明白他们在做什么,我只是不知道如何正确地写出来,因为我相信我做的每件事都是正确的,我只是错过了一些东西 console.log(“xcdcxcxvccvffdgfcd”) thing(); 异步函数
async/await
实现这一点。我做错了什么,为什么async/await
不能像我期望的那样工作?(等待运行其他代码,直到此承诺得到解决)
许多问题都像这一个链接到“介绍页”。我都读过了,我明白他们在做什么,我只是不知道如何正确地写出来,因为我相信我做的每件事都是正确的,我只是错过了一些东西
console.log(“xcdcxcxvccvffdgfcd”)
thing();
异步函数thing(){
让c=等待其他事物();
console.log(“dfasfadsfdadasasdfa”+c)
}
异步函数otherthing(){
等待设置超时(函数(){
返回新承诺((解决、拒绝)=>{
设f=“reewwqfewfasgsadf”
返回(f);
})
}, 3000);
}
异步函数otherthing
没有返回
语句,因此它将始终返回解析为未定义
的承诺
等待设置超时(…)
没有任何意义。您只能等待
承诺,并且设置超时
不返回承诺
您需要明确地:
- 在
其他内容中创建
新承诺()
在传递给resolve()
setTimeout
来自返回
其他事物的承诺
不要在传递给
setTimeout
的回调函数中创建承诺。这是毫无意义的。异步函数otherthing
没有return
语句,因此它总是返回解析为未定义的承诺
等待设置超时(…)
没有任何意义。您只能等待
承诺,并且设置超时
不返回承诺
您需要明确地:
- 在
其他内容中创建新承诺()
resolve()
在传递给setTimeout
返回
来自其他事物的承诺
不要在传递给setTimeout
的回调函数中创建承诺。这是毫无意义的。你应该在Promise
正文中移动setTimeout
,然后在那里执行resolve(f)
您应该将setTimeout
移动到Promise
主体内,然后在那里执行resolve(f)
您必须从otherthing
函数,而不是从setTimeout
回调返回newpromise
。您应该构造承诺,在其执行器回调中启动异步操作(setTimeout
),然后异步resolve()
或reject()
承诺
function otherthing() {
return new Promise((resolve, reject) => {
setTimeout(function(){
let f = "rerewwqfewfasgsadf"
resolve(f);
}, 3000);
});
}
对于本质上只是setTimeout
周围的承诺包装的函数,这里不需要任何async
/wait
。另请参见。您必须从其他
函数返回新承诺
,而不是从设置超时
回调返回。您应该构造承诺,在其执行器回调中启动异步操作(setTimeout
),然后异步resolve()
或reject()
承诺
function otherthing() {
return new Promise((resolve, reject) => {
setTimeout(function(){
let f = "rerewwqfewfasgsadf"
resolve(f);
}, 3000);
});
}
对于本质上只是setTimeout
周围的承诺包装的函数,这里不需要任何async
/wait
。另请参见。Async/await与返回承诺的函数一起工作。您的otherthing
函数不返回任何内容
您可以通过返回正在实例化的承诺来修复代码,如下所示:
thing();
异步函数thing(){
让c=等待其他事物();
console.log(“dfasfadsfdadasasdfa”+c)
}
函数otherthing(){
返回新承诺((解决、拒绝)=>{
setTimeout(函数(){
设f=“reewwqfewfasgsadf”
决议(f);
}, 3000)
});
}
Async/await与返回承诺的函数一起工作。您的otherthing
函数不返回任何内容
您可以通过返回正在实例化的承诺来修复代码,如下所示:
thing();
异步函数thing(){
让c=等待其他事物();
console.log(“dfasfadsfdadasasdfa”+c)
}
函数otherthing(){
返回新承诺((解决、拒绝)=>{
setTimeout(函数(){
设f=“reewwqfewfasgsadf”
决议(f);
}, 3000)
});
}
因为setTimeout
不返回承诺otherthing
不返回任何内容。因为setTimeout
不返回承诺otherthing
不返回任何内容。