如何 return 回调函数的 return 值
How to return a callback's function return value
我正在使用 loopback-next 和条带 api。在条带 API 中,我按如下方式调用检索帐户,在 payments.controller.ts 文件中:
@post('/payments/retrieve-stripe/{id}', {
responses: {
'200': {
description: 'User model instance',
content: {'application/json': {schema: {'x-ts-type': User}}},
},
},
})
async retrieveStripe(@param.path.number('id') id: number,
@requestBody() req: any): Promise<any> {
console.log(req);
if (!req.stripeAccountId) {
throw new HttpErrors.NotFound('No Stripe Account');
}
else {
return await stripe.accounts.retrieve(
req.stripeAccountId,
function(err: any, account: any) {
return err ? err : account
})
}
}
但是,当我尝试 return 帐户时,return 没有在 JSON 正文中编辑任何内容。如果我尝试,response.json 在前端,它说 JSON 意外完成,这意味着正文中没有任何内容。我如何才能在控制器函数内的上述函数中成功 return 帐户?
这与我尝试 return 字符串时遇到的问题相同。我不知道该怎么做。
编辑:我了解到您不能在回调中 return 变量,这就是问题所在。
您必须要求类型定义 (@types/stripe) 才能以 promise 样式使用其库。之后你可以通过以下方式使用:-
@post('/payments/retrieve-stripe/{id}', {
responses: {
'200': {
description: 'User model instance',
content: { 'application/json': { schema: { type: 'object' } } },
},
},
})
async retrieveStripe(@param.path.number('id') id: number,
@requestBody() req: any): Promise<any> {
console.log(req);
if (!req.stripeAccountId) {
throw new HttpErrors.NotFound('No Stripe Account');
} else {
return await stripe.accounts.retrieve(req.stripeAccountId).then((res: any) => {
return res;
}).catch((err: any) => {
console.debug(err);
throw new HttpErrors.InternalServerError('Something went wrong!')
});
}
}
更多详情https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/stripe/stripe-tests.ts
我正在使用 loopback-next 和条带 api。在条带 API 中,我按如下方式调用检索帐户,在 payments.controller.ts 文件中:
@post('/payments/retrieve-stripe/{id}', {
responses: {
'200': {
description: 'User model instance',
content: {'application/json': {schema: {'x-ts-type': User}}},
},
},
})
async retrieveStripe(@param.path.number('id') id: number,
@requestBody() req: any): Promise<any> {
console.log(req);
if (!req.stripeAccountId) {
throw new HttpErrors.NotFound('No Stripe Account');
}
else {
return await stripe.accounts.retrieve(
req.stripeAccountId,
function(err: any, account: any) {
return err ? err : account
})
}
}
但是,当我尝试 return 帐户时,return 没有在 JSON 正文中编辑任何内容。如果我尝试,response.json 在前端,它说 JSON 意外完成,这意味着正文中没有任何内容。我如何才能在控制器函数内的上述函数中成功 return 帐户?
这与我尝试 return 字符串时遇到的问题相同。我不知道该怎么做。
编辑:我了解到您不能在回调中 return 变量,这就是问题所在。
您必须要求类型定义 (@types/stripe) 才能以 promise 样式使用其库。之后你可以通过以下方式使用:-
@post('/payments/retrieve-stripe/{id}', {
responses: {
'200': {
description: 'User model instance',
content: { 'application/json': { schema: { type: 'object' } } },
},
},
})
async retrieveStripe(@param.path.number('id') id: number,
@requestBody() req: any): Promise<any> {
console.log(req);
if (!req.stripeAccountId) {
throw new HttpErrors.NotFound('No Stripe Account');
} else {
return await stripe.accounts.retrieve(req.stripeAccountId).then((res: any) => {
return res;
}).catch((err: any) => {
console.debug(err);
throw new HttpErrors.InternalServerError('Something went wrong!')
});
}
}
更多详情https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/stripe/stripe-tests.ts