首页 > 解决方案 > Adonis 检测到未处理的 Promise 拒绝,这可能会导致生产中出现不良行为

问题描述

您在运行状况检查服务中使用 adonisJS,并尝试根据服务中的轴发出两个请求。我收到来自 Adonis 的警告“Adonis 检测到未处理的承诺拒绝,这可能会导致生产中出现不良行为”以及我的调度程序每 3 分钟监控一次此服务。我的电话有什么问题,为什么阿多尼斯会抱怨它?

我的策略是在没有登录的情况下为一条路线发布帖子,并且在获取已记录的路线之后立即发布。我从帖子中获取请求令牌并在请求标头中播放它,但阿多尼斯给了我这个警告。它是什么?

App/Services/JaiminhoService

   try {
       await axios.post(Env.get('JAIMINHO_URL'), data).then(response => {
         if(response.status === 200) {
           try {
            await axios.get(`${Env.get('JAIMINHO_URL')}/push/schedule/`, {
              headers: { Authorization: `Bearer ${response.data?.token}` }
            }).then(response => {
              if(response.status === 200) {
                return {
                  status: response.status,
                  message: response.statusText,
                  service_name: jaiminho,
                  date,
                }
              }
            })
           } catch (error) {
             return 'Error'
           }

          }
        else  {
          //send mail
        }
       })
       return
    } catch (error) {
      return {
        message: 'Error! Please check Jaiminho service.',
        service_name: jaiminho,
        date
      }
    }


警告:Adonis 检测到未处理的 Promise 拒绝,这可能会导致生产中出现不良行为。要停止此警告,请在 promise 上使用 catch() 或将 await 调用包装在 try/catch 中。

标签: node.jsaxiosadonis.js

解决方案


由于您使用的是 async/await,因此您可以避免嵌套.then()调用。

我建议你把你的代码改成这样,看看会发生什么:

try {
    const postResponse = await axios.post(Env.get('JAIMINHO_URL'), data);
    if (postResponse.status === 200) {
      const getResponse = await axios.get(`${Env.get('JAIMINHO_URL')}/push/schedule/`, {
      headers: { Authorization: `Bearer ${postResponse.data?.token}` }});
    if (getResponse.status === 200) {
      return {
        status: response.status,
        message: response.statusText,
        service_name: jaiminho,
        date
      };
    }
  } else {
    //send mail
  }


} catch (error) {
    return {
      message: 'Error! Please check Jaiminho service.',
      service_name: jaiminho,
      date
    };
}

推荐阅读