Javascript 在NodeJS中对承诺的结果调用函数
那么是如何工作的呢?当我执行Javascript 在NodeJS中对承诺的结果调用函数,javascript,json,node.js,mongodb,Javascript,Json,Node.js,Mongodb,那么是如何工作的呢?当我执行返回用户时 是否完整User.findOne({email:email})--->User?第一条语句是否转换为返回用户的函数,因此您正在执行以下操作: return User.findOne({email: email}).then((user) => { return user; }); 最后呢? 当您执行,然后返回某个内容时,实际的承诺(第一个)语句会发生什么变化?(then之前的整个语句)?查看Mongoose的文档,代码中使用的.findOn
返回用户时
是否完整User.findOne({email:email})--->User
?第一条语句是否转换为返回用户的函数,因此您正在执行以下操作:
return User.findOne({email: email}).then((user) => {
return user; });
最后呢?
当您执行,然后返回某个内容时,实际的承诺(第一个)语句会发生什么变化?(then之前的整个语句)?查看Mongoose的文档,代码中使用的
.findOne()
不会返回承诺,而是一个查询
,该查询具有一个.then()
函数,该函数通过异步操作生成一个值。要获得真正的承诺,您必须使用.exec()
,这是可以理解的
整个User.findOne({email:email})--->User
?是吗
左边的语句变成用户,所以您正在做:returnuser代码>最后
不。实际上,整个。然后((user)=>{return user;})代码>零件是冗余的。.findOne(…)
可以通过如下方式访问的值
返回User.findOne({email:email})然后访问查询的.then()
。为了说明这一点,我们来看看这个例子,它展示了同样的东西,但有真正的承诺
当您执行。然后
,并返回某个内容时,实际的
承诺声明?(之前的全部声明)
没什么。如果你有真正的承诺,它们要么悬而未决,要么兑现,要么被拒绝。.then()
函数返回一个新的承诺,该承诺也被拒绝或履行。当您从.then()
函数内部返回某些内容时,返回的值实际上已解析,这意味着它将有效地返回Promise.resolve()。
据我所知,。然后函数在Mongoose中在技术上不受欢迎-您应该使用自己的承诺实现
也就是说,看起来mongoose一直在使用它的promise实现,并且。然后实现了功能:
。然后
只需将一个新承诺链接到前一个承诺的执行。实际上,您有两个承诺,它们将一个接一个地执行。您是否使用库来查询数据库?我不记得.findOne
返回了一个承诺。@DanielB,mongoose当我打电话时。然后在User.findOne上,然后不返回User.findOne({email:email}),它做什么?它会返回未定义的吗?如果我有一个函数function exe(){User.findOne({email:email})。然后((result)=>{return result;})}
,我有exe()
,返回了什么?这将返回未定义的
,因为你没有执行{return User.findOne(..)
。如果您查看我的小提琴,您会注意到根本不需要添加.then()
,而是应该将函数定义为函数exe(){return User.findOne({email:email});}
函数f(){return函数g(){return“ggggg”;}}}console.log(f()代码>为什么返回[函数:g]
?而不是ggggg
,因为您正在返回函数声明。首先在函数f()
之外声明函数g()
,然后像函数f(){return g();}}
一样返回调用函数g()
,因此当调用User.findOne({email:email})时,然后((result)=>{return result;})它会自动成为函数吗?现在,当你返回它时,你返回f,它与f一样。那么((result)=>{returnresult})
?其中f
对应于User.findOne…
return user;
Promise.prototype.then = function (onFulfill, onReject) {
var newPromise = new Promise;
if ('function' == typeof onFulfill) {
this.onFulfill(handler(newPromise, onFulfill));
} else {
this.onFulfill(newPromise.fulfill.bind(newPromise));
}
if ('function' == typeof onReject) {
this.onReject(handler(newPromise, onReject));
} else {
this.onReject(newPromise.reject.bind(newPromise));
}
return newPromise;
};