Javascript 如何将新承诺对象从后端服务文件返回到后端控制器?
我正在尝试连接到后端服务文件中的Recurly API,然后作为新的承诺返回给后端控制器。 由于某种原因,我的代码无法工作 我一直收到此错误消息: 0 | account-| TypeError[ERR_INVALID_ARG_TYPE]:第一个参数必须是string、Buffer、ArrayBuffer、Array或类似数组的Object类型之一。接收类型未定义 这是我的代码,API配置和其他设置工作正常。请记住,这是项目代码的一部分 Service.js: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
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都不能通过的情况。不是吗?我们都不知道在回调约定中会发生什么情况,但是为什么即使在预期的情况下,如果
/或者
会简单得多,并且工作方式相同,那么仍然要让代码容易出错呢?是的,我会编辑答案,谢谢你指出。那样更好。