Javascript 在函数返回值之前比较两个值
我有一些代码,其中一个函数(包含一个承诺)运行,然后返回一个布尔值。然后检查该值是否为真,如果为真,请运行其他代码。我将这些值记录到控制台以进行一些调试,我注意到检查函数是否返回true的if语句在函数返回任何内容之前运行 我曾尝试使用“wait”和“async”,但在使用它们时没有发现任何成功Javascript 在函数返回值之前比较两个值,javascript,node.js,Javascript,Node.js,我有一些代码,其中一个函数(包含一个承诺)运行,然后返回一个布尔值。然后检查该值是否为真,如果为真,请运行其他代码。我将这些值记录到控制台以进行一些调试,我注意到检查函数是否返回true的if语句在函数返回任何内容之前运行 我曾尝试使用“wait”和“async”,但在使用它们时没有发现任何成功 javascript function myFunc() promise() .then(value => { console.log('Returned tr
javascript
function myFunc()
promise()
.then(value => {
console.log('Returned true');
return true;
})
.catch(err => {
console.log('Error', err);
});
end
if (myFunc()) {
console.log('Value was true');
} else {
console.log('Value was false');
}
预期:
Returned true
Value was true
实际:
Value was false
Returned true
您正试图从函数内部返回一个承诺,在使用承诺的那一刻,您正在处理异步代码。这意味着为了从承诺中获得价值,首先需要履行承诺 在您的例子中,您评估的是函数的返回值,而不是承诺的返回值。由于函数中没有显式返回,因此返回的是未定义的。这就是为什么您会在控制台中看到
值为false
。然后,您的承诺得到了实现,您在控制台中看到返回true
,但您从未评估过承诺返回的值
假设您正在从需要使用的全局范围调用函数,那么使用语法来访问承诺返回的值
如果你的函数是这样的:
function myFunc() {
return Promise.resolve()
.then(value => {
console.log('Returned true');
return true;
})
}
myFunc().then(value => {
if(value) console.log('It is true')
else console.log('Is it false')
})
您的if语句应该变成这样:
function myFunc() {
return Promise.resolve()
.then(value => {
console.log('Returned true');
return true;
})
}
myFunc().then(value => {
if(value) console.log('It is true')
else console.log('Is it false')
})
基本上,您等待承诺实现,当这种情况发生时,您通过param获得返回值(在这个简单的示例中,它总是正确的,但也可能是错误的)
我希望这对您有所帮助。尝试从函数返回承诺:
function myFunc()
return promise()
.then(value => {
console.log('Returned true');
return true;
})
.catch(err => {
console.log('Error', err);
});
end
if (myFunc()) {
console.log('Value was true');
} else {
console.log('Value was false');
}
这不是最好的做法,我会坚持一个好的承诺链:
promise()
.then(value => {
if (value) {
console.log('Value was true');
} else {
console.log('Value was false');
}
})
.catch(err => {
console.log('Error', err);
});
您需要使用“wait”来等待承诺响应
promise = () => new Promise( (resolve, reject ) => resolve(true) );
async function myFunc(){
try {
let value = await promise();
if (value === true){
console.log('Returned true');
return true;
}
} catch (err) {
console.log('Error', err);
}
}
async function main(){
if ( await myFunc() ) {
console.log('Value was true');
} else {
console.log('Value was false');
}
}
main();