最近我已经开始了解异步功能是JS 所以我写了一个必须发出请求的代码,并将其从请求中接收到的数据写入CSV中,问题是写函数没有等待请求响应,因此它只是写了未定义的
出于调试目的,我编写了新代码以查看异步功能如何工作,因此我有下一种情况
我有3个函数log1(),log2(),main(), 我希望:
当我调用main()时,它应该调用log1(),等到它完成所有语句,然后再调用log2()
所以我写了这段代码:
function slowFunction(){
setTimeout(() => {
console.log('1')
}, 2000);
}
function log1() {
return new Promise(resolve =>{
resolve(slowFunction())
})
}
function log2() {
console.log('2');
}
async function main() {
var aux = await log1();
log2();
}
main();
所以我希望它能输出
1
2
但是它确实输出了
2
1
我要注意不能编辑slowFunction,您应该将其视为需要 unknown 的时间才能执行的函数,因此我需要等待它完成,然后程序应执行log2();
答案 0 :(得分:0)
问题出在slowFunction
上。似乎您想slowFunction
在超时后解决,但它会立即返回当前写入的状态。您需要重写slowFunction
才能返回Promise
,或者只需重写log1
:
function log1() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('1');
resolve();
}, 2000);
});
}
答案 1 :(得分:0)
确保所有异步功能都用promise包装。
function slowFunction(){
return new Promise(resolve =>{
setTimeout(() => {
resolve("1")
}, 2000);
})
}
async function log1() {
let ret = await slowFunction()
console.log(ret)
}
function log2() {
console.log('2');
}
async function main() {
var aux = await log1();
log2();
}
main();