Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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 如何将新承诺对象从后端服务文件返回到后端控制器?_Javascript_Node.js_Recurly - Fatal编程技术网

Javascript 如何将新承诺对象从后端服务文件返回到后端控制器?

Javascript 如何将新承诺对象从后端服务文件返回到后端控制器?,javascript,node.js,recurly,Javascript,Node.js,Recurly,我正在尝试连接到后端服务文件中的Recurly API,然后作为新的承诺返回给后端控制器。 由于某种原因,我的代码无法工作 我一直收到此错误消息: 0 | account-| TypeError[ERR_INVALID_ARG_TYPE]:第一个参数必须是string、Buffer、ArrayBuffer、Array或类似数组的Object类型之一。接收类型未定义 这是我的代码,API配置和其他设置工作正常。请记住,这是项目代码的一部分 Service.js: const Recurly = r

我正在尝试连接到后端服务文件中的Recurly API,然后作为新的承诺返回给后端控制器。 由于某种原因,我的代码无法工作

我一直收到此错误消息:

0 | account-| TypeError[ERR_INVALID_ARG_TYPE]:第一个参数必须是string、Buffer、ArrayBuffer、Array或类似数组的Object类型之一。接收类型未定义

这是我的代码,API配置和其他设置工作正常。请记住,这是项目代码的一部分

Service.js:

const Recurly = require('recurly-js');

function TeamService({}) {

    this.updateBillingInfo = (team_id, body) => {

    const recurly = new Recurly(
      {
        API_KEY: config.recurly.API_KEY,
        SUBDOMIAN: config.recurly.SUBDOMIAN,
        ENVIRONMENT: config.recurly.ENVIRONMENT,
        DEBUG: config.recurly.DEBUG,
        API_VERSION: config.recurly.API_VERSION
      }
    );

    return new Promise((resolve, reject) => {
      let res;
      let err;

      recurly.billingInfo.update(team_id, { token_id: body.id }, function (errResponse, response) {
        if (errResponse) {
          err = errResponse.data.error;
        }
        if(response){
          res = response;
        }
      });

      resolve(res);
      reject(err);

    });
  };
}
}
Controller.js:

function Controller({ teamService, httpStatus, }) {
this.updateBillingInfo = (req, res) => {

    const {
      team_id,
      body
    } = req;

    teamService.updateBillingInfo(team_id, body).then(function(result){
      console.log(result);
      return httpStatus.twoHundredSuccess(res, {result});
    }).catch(function(err){
      console.log(err);
      httpStatus.fiveHundredError(res, err);
    });
  }

}

我希望服务中的函数能够从API中获取信息。作为控制器文件的新承诺返回。但它在service.js中不起作用。我不太守信用。请让我知道我做错了哪一部分。

您的解析和拒绝应该在异步函数的回调中:

recurly.billingInfo.update(team_id, { token_id: body.id }, function(
    errResponse,
    response
  ) {
    if (errResponse) {
      reject(errResponse.data.error);
    }else{
      resolve(response);
    }
  });

它必须是
if
/
else
。使用两个
if
s,您可能会遇到这样的情况,即既不调用
resolve
也不调用
reject
。@Bergi理想情况下是的,在
错误回调中应该有一个
if/else
,这是一种常规做法,应该是这样的。但考虑到这个特殊情况,我认为永远不会有任何一个if都不能通过的情况。不是吗?我们都不知道在回调约定中会发生什么情况,但是为什么即使在预期的情况下,如果
/
或者
会简单得多,并且工作方式相同,那么仍然要让代码容易出错呢?是的,我会编辑答案,谢谢你指出。那样更好。