Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在NodeJS中对承诺的结果调用函数_Javascript_Json_Node.js_Mongodb - Fatal编程技术网

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;
};