我有一个简单的代码
async function foo() {
const b = bar()
return 2 + b
}
async function bar() {
return 2
}
(async() => {
console.log(typeof foo())
})()
并记录object
。不是NaN
。如何number + object
- > object
?
从我记得的+
规范中,如果其中一个操作数是基元,第二个是对象,那么对象应该转换为基元。在这种情况下使用.valueOf()
方法
答案 0 :(得分:1)
它认为这是因为async
函数尚未解决,因为没有await
。所以你得到了承诺对象而不是结果。
看这些案例:
async function foo () {
const b = await bar() //await result
return 2 + b
}
async function bar () {
return 2
}
;(async () => {
console.log(typeof await foo()) //number
})()
async function foo () {
const b = bar() //no await
return 2 + b
}
async function bar () {
return 2
}
;(async () => {
console.log(typeof await foo()) //string
})()
答案 1 :(得分:0)
函数foo
和bar
返回一个promise,所以,你得到了promise类型(Object)
您可能希望比较结果,因此您需要等待承诺解决连接:
let result = await foo();
^
async function foo() {
const b = bar() // Here you need to wait as well.
return 2 + b; // 2 + "[object Promise]"
}
async function bar() {
return 2
}
(async() => {
let result = await foo();
console.log(result);
console.log(typeof result);
})()
现在,要获取NaN值,您需要转换为数字:
async function foo() {
const b = bar(); // Here you need to wait as well.
return Number(2 + b); // <- Try to conver to number
}
async function bar() {
return 2
}
(async() => {
let result = await foo();
console.log(result);
console.log(typeof result);
})()