Javascript 为什么在承诺调用另一个承诺返回时';未定义';

Javascript 为什么在承诺调用另一个承诺返回时';未定义';,javascript,mongoose,promise,bluebird,Javascript,Mongoose,Promise,Bluebird,在我的应用程序中,我使用mongoose和mongodb,在一个场景中,我需要从另一个promise调用promise,但promise返回未定义,我的代码是 函数优先(num){ 返回新承诺(功能(解决、拒绝){ 如果(数值%2==0){ 解析(num); } 否则{ 拒绝(“发生错误”); } }) } 函数秒(num){ 首先(num)。然后(函数(res){ 返回res; }).catch(函数(err){ 返回错误; }) } console.log(第二个(2)) 您正在记录sec

在我的应用程序中,我使用mongoose和mongodb,在一个场景中,我需要从另一个promise调用promise,但promise返回未定义,我的代码是

函数优先(num){
返回新承诺(功能(解决、拒绝){
如果(数值%2==0){
解析(num);
}
否则{
拒绝(“发生错误”);
}
})
}
函数秒(num){
首先(num)。然后(函数(res){
返回res;
}).catch(函数(err){
返回错误;
})
}
console.log(第二个(2))

您正在记录
second(2)
的返回值,但是
second
函数中没有
return
语句,因此它将始终返回
未定义的


请注意,传递给
然后
捕获
的函数表达式(具有
返回
语句的函数表达式不是
函数本身)。

您正在记录
秒(2)
的返回值,但
函数中没有
返回
语句,因此它总是返回
未定义的


请注意,传递给
然后
catch
的函数表达式(具有
return
语句的函数表达式不是
second
函数本身)。

second
不会
返回任何内容?您所有的
return
语句都在一些回调中。@Bergi,谢谢,如何解决这个问题到
return
您不能。承诺是异步的。您所能做的就是返回一个新的承诺(通过调用
then
catch
构建),然后使用
second(2)。然后在调用中使用(console.log)
second
不会返回任何内容吗?您所有的
return
语句都在一些回调中。@Bergi,谢谢,如何解决这个问题到
return
您不能。承诺是异步的。您所能做的就是返回一个新的承诺(通过调用
then
catch
构建),然后在调用中使用
second(2)。然后(console.log)