Javascript 嵌套rest调用时未经处理的PromisejectionWarning

Javascript 嵌套rest调用时未经处理的PromisejectionWarning,javascript,node.js,reactjs,axios,Javascript,Node.js,Reactjs,Axios,我有以下Rest调用,其中第二个Rest调用需要来自第一个调用的数据作为其请求的一部分。 因此,我将它们嵌套如下。对于JS/React来说是个新手,据我所知,这种嵌套方式 似乎没有人反对。如果不是,请给出建议 下面的工作基于“发送电子邮件有效”的值这一事实打印(从下面的控制台日志)。 此外,如预期的那样,由于此rest呼叫,收到了一封电子邮件 我的问题是以下错误消息。为什么会出现这个错误?如果我只打了一个rest电话,我就不会得到这个消息 所以我相信问题在于我的筑巢。我当然有如下的捕获块。 我能

我有以下Rest调用,其中第二个Rest调用需要来自第一个调用的数据作为其请求的一部分。 因此,我将它们嵌套如下。对于JS/React来说是个新手,据我所知,这种嵌套方式 似乎没有人反对。如果不是,请给出建议

下面的工作基于“发送电子邮件有效”的值这一事实打印(从下面的控制台日志)。 此外,如预期的那样,由于此rest呼叫,收到了一封电子邮件

我的问题是以下错误消息。为什么会出现这个错误?如果我只打了一个rest电话,我就不会得到这个消息 所以我相信问题在于我的筑巢。我当然有如下的捕获块。 我能知道为什么会发生这种情况以及如何预防吗?谢谢

exports.getData = (req, res) => {
  // 1st rest call  
  axios.post(urls.env.endpoint1, getPostBody1(req.body.code))
    .then((output) => {
      // needed this name value from the first call to be able to pass in the next rest call below. 
      const name = output.data.name_response_data_list[0].short_name;
      console.log(name);
      res.status(200).then(
        // 2nd rest call
        axios.post(urls.env.endpoint2, getPostBody2(name, req.body.email_address))
          .then(() => {
            console.log('Sending Email Worked!');
            res.status(200).send('Success');
          }, () => {
            console.log('bombed....');
          })
      );
    }, (error) => {
      console.log(error);
    });
};
错误消息:

[服务器:监视](节点:77802)未处理PromisejectionWarning: TypeError:res.status(…)。then不是函数[服务器:监视]
那么在axios.post (/Users/name/projects/front/src/server/controllers/Controller1.js:77:23) [服务器:监视]在进程中。\u (内部/process/next_tick.js:68:7)[服务器:监视](节点:77802) 未处理的PromisejectionWarning:未处理的承诺拒绝。这 错误源于异步函数的内部抛出 没有拦截,或拒绝未处理的承诺 with.catch()。(拒绝id:1)[服务器:监视](节点:77802)[DEP0018] 弃用警告:未处理的承诺拒绝被弃用。在里面 未来,未经处理的拒绝承诺将终止合同 具有非零退出代码的Node.js进程。[服务器:监视]正在发送 电子邮件成功了


此错误的原因可能是函数
res.status()
没有返回承诺,因此其返回值没有
.then()
函数

此外,如果我正确地解释了代码,那么对于每个请求,您将向一个端点发送两个请求,并在状态代码为200的情况下回复“Success”。但是,您的代码会将此状态代码设置两次(在每个端点请求之后设置一次)。我不认为这有任何好处,但是,我不知道您的代码的其余部分

如果您只想在两个请求完成后发送状态200(这是有意义的),您可以简单地删除
res.status(200)。然后(
并将其更改为

      ...
      const name = output.data.name_response_data_list[0].short_name;
      console.log(name);
      // 2nd rest call
      axios.post(urls.env.endpoint2, getPostBody2(name, req.body.email_address))
      .then(() => {
        console.log('Sending Email Worked!');
        res.status(200).send('Success');
      }, () => {
        console.log('bombed....');
      });
      ...

看看为什么拒绝没有被错误回调处理。关于错误本身,“TypeError:res.status(…)。then is not a function”(类型错误:res.status(…)。then is not a function)是非常清楚的。而且,调用
res.status()的逻辑也没有意义
在您使用axios执行远程请求之前,这实际上删除了错误。@charlietfl将是一个挑战,因为它可能是4xx或5xx,这与我能够硬编码200时的Suces不同。@karvai您可以使用axios post error对象的状态,或者只发送您的own@charlietfl你的意思是s沿着以下行进行的操作:},error=>{console.log('bombed….');res.status(error.status).send('error');});我会试一试的。谢谢。@karvai是的。我已经很长时间没有使用axios了,但假设status属性与您显示的一样