Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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 (节点:5540)警告:已在处理程序中创建承诺,但未从中返回_Javascript_Node.js - Fatal编程技术网

Javascript (节点:5540)警告:已在处理程序中创建承诺,但未从中返回

Javascript (节点:5540)警告:已在处理程序中创建承诺,但未从中返回,javascript,node.js,Javascript,Node.js,以下代码: function handleError(res, statusCode) { statusCode = statusCode || 500; return function(err) { res.status(statusCode).send(err); }; } function respondWithResult(res, statusCode) { statusCode = statusCode || 200; return function(e

以下代码:

function handleError(res, statusCode) {
  statusCode = statusCode || 500;
  return function(err) {
    res.status(statusCode).send(err);
  };
}

function respondWithResult(res, statusCode) {
  statusCode = statusCode || 200;
  return function(entity) {
    if (entity) {
      res.status(statusCode).json(entity);
    }
  };
}


// Creates a new Store in the DB
export function create(req, res) {
  // create user
  let user = req.body.user;
  let store = req.body.store;

  auth.hash(user.password)
    .then(hash => {
      user.password = hash;
      // Create user, then create store, attach store object id to user, and attach user object id to store
      User.create(user)
      .then(userRes => {
        store.owner    = userRes._id;
        store.memebers = [];
        store.memebers.push(store.owner);

        Store.create(store)
        .then(storeRes => {
          return respondWithResult(res, 201);
        })
        .catch(err => handleError(err));
      })
      .catch(err => handleError(err));
    })
    .catch(err => handleError(err));
}

打印标题中提到的错误,“(节点:5540)警告:已在处理程序中创建承诺,但未从中返回”。我尝试过更改和调整代码,但错误仍然存在

当您不返回请求时,这是一条警告消息。当然,这似乎只是另一个警告,但当你在一个大的应用程序上工作时,这会成为一个非常令人头痛的问题,因为这会导致内存泄漏,并且在你重新启动应用程序之前不会释放内存,或者可能会压坏你的服务器

您还需要返回其他状态:

function respondWithResult(res, statusCode) {
  statusCode = statusCode || 200;
  return function(entity) {
    if (entity) {
      res.status(statusCode).json(entity);
    }else{ 
      //you should write an else statement also
      //maybe something like this
       res.status(statusCode).send(err);        
    }
  };
}

在任何情况下都返回您的请求。

当您不返回请求时,这是一条警告消息。当然,这似乎只是另一个警告,但当你在一个大的应用程序上工作时,这会成为一个非常令人头痛的问题,因为这会导致内存泄漏,并且在你重新启动应用程序之前不会释放内存,或者可能会压坏你的服务器

您还需要返回其他状态:

function respondWithResult(res, statusCode) {
  statusCode = statusCode || 200;
  return function(entity) {
    if (entity) {
      res.status(statusCode).json(entity);
    }else{ 
      //you should write an else statement also
      //maybe something like this
       res.status(statusCode).send(err);        
    }
  };
}

在任何情况下都返回到您的请求。

此警告是因为您的代码正在
.then()
处理程序中创建承诺,但没有从这些处理程序返回承诺

更改:

User.create(user)
致:

以及,改变:

Store.create(store)

如果不返回在
.then()
处理程序中创建的这些承诺,它们将成为独立的承诺链,并且不会链接到以前的承诺链。这通常是一个编程错误,这就是为什么蓝鸟会发出警告

当您返回它们时,它们会添加到承诺链中,因此父承诺会等待它们的完成,然后再继续使用该链


我还建议您可能想要更改:

auth.hash(user.password)
致:

这样,
create()
的调用者就可以知道什么时候一切都完成了



而且,您只需要一个最高级别的
.catch()
处理程序。被拒绝的承诺会自动传播到顶层(这是使用承诺时更容易处理错误的原因之一)。

此警告是因为您的代码正在
.then()
处理程序中创建承诺,但不会从这些处理程序返回承诺

更改:

User.create(user)
致:

以及,改变:

Store.create(store)

如果不返回在
.then()
处理程序中创建的这些承诺,它们将成为独立的承诺链,并且不会链接到以前的承诺链。这通常是一个编程错误,这就是为什么蓝鸟会发出警告

当您返回它们时,它们会添加到承诺链中,因此父承诺会等待它们的完成,然后再继续使用该链


我还建议您可能想要更改:

auth.hash(user.password)
致:

这样,
create()
的调用者就可以知道什么时候一切都完成了




而且,您只需要一个最高级别的
.catch()
处理程序。被拒绝的承诺会自动传播到顶层(这是使用承诺时更容易处理错误的原因之一)。

您是否尝试
返回auth.hash
?刚刚尝试过,但遗憾的是,它仍然产生相同的错误。实际上有很多未返回的承诺。这只是一个警告,但也可能是一个错误。也没有必要做三次捕捉,你可以把它放在最后(但你必须回报承诺)。好吧,你需要回报所有的承诺。这意味着
返回User.create(…)
返回Store.create(…)
返回auth.hash(…)
您是否尝试过
返回auth.hash
?刚刚尝试过,但遗憾的是仍然产生了相同的错误。实际上,那里有很多未回复的承诺。这只是一个警告,但也可能是一个错误。也没有必要做三次捕捉,你可以把它放在最后(但你必须回报承诺)。好吧,你需要回报所有的承诺。这意味着
return User.create(…)
return Store.create(…)
return auth.hash(…)
我可以问一下为什么我得到-1吗?因为你的答案与所问的问题毫无关系。你基本上做了同样的事情
User.create(User)User.create(User)
return User.create(User)
返回到请求我指出了OP代码中导致此警告的两行代码,并解释了此警告存在的原因。你两个都没有。这不是从函数返回的一般问题,而是从
.then()
处理程序中返回承诺的具体问题。我可以问一下为什么得到-1吗?因为您的答案与所问的问题无关。您基本上做了相同的事
User.create(User)User.create(User)
to
return User.create(User)
returning to a request我指出了OP代码中导致此警告的两行代码,并解释了此警告存在的原因。你两个都没有。这不是从函数返回的一般问题,而是从
.then()
处理程序中返回承诺的具体问题。