我正在学习异步等待使用节点js
var testasync = async () =>
{
const result1 = await returnone();
return result1;
}
testasync().then((name)=>{
console.log(name);
}).catch((e) =>{
console.log(e);
});
var returnone = () =>{
return new Promise((resolve,reject)=>
{
setTimeout(()=>{
resolve('1');
},2000)
})
}
失败,returnone不是函数。我究竟做错了什么?只是单独调用函数
returnone().then((name1) => {
console.log(name1)
})
只需调用上面的代码
即可答案 0 :(得分:1)
您正在将函数分配给代码末尾的变量 returnone ,但是您尝试在此分配之前调用该函数。您有两种方法可以修复代码:
选项1
使用函数声明;这样,函数就会被提升,你可以从一开始就使用它:
var testasync = async () => {
const result1 = await returnone();
return result1;
}
testasync().then((name) => {
console.log(name);
}).catch((e) => {
console.log(e);
});
function returnone() {
return new Promise((resolve,reject) => {
setTimeout(() => {
resolve('1');
}, 2000)
})
}
选项2
在尝试调用函数之前将函数分配给变量:
var returnone = () => {
return new Promise((resolve,reject) => {
setTimeout(() => {
resolve('1');
}, 2000)
})
}
var testasync = async () => {
const result1 = await returnone();
return result1;
}
testasync().then((name) => {
console.log(name);
}).catch((e) => {
console.log(e);
});
答案 1 :(得分:1)
由于hoisting而导致此错误的原因。 JS看到的代码看起来像这样
var returnone;
var testasync = async () => {
const result1 = await returnone();
return result1;
}
testasync().then((name) => {
console.log(name);
}).catch((e) => {
console.log(e);
});
returnone = () => {
return new Promise((resolve,reject) => {
setTimeout(() => {
resolve('1');
}, 2000)
})
}
因此returnone
的值未定义。