【发布时间】:2018-04-23 22:08:58
【问题描述】:
我想将下面的 callEndPointWrapper 转换为返回 Promise 而不是回调。
我已经使用下面的代码进行了测试,但是等待 Promise for callEndpointWrapper() 请求超时。
我错过了下面的任何东西吗?
(在调试时,我在等待 Promise 时看到下面的代码行中的请求超时:
return (function callEndpoint(callback): any {
回调:
function callEndPointWrapper(): any {
return function callEndpoint(callback) {
try {
// gRPC call
client[methodName](req, options, callback);
}
catch (err) {
callback(err);
}
};
}
const result = yield callEndpointWrapper();
// I get the correct result from callback above (both on success or error)
承诺:
function callEndPointWrapper(): Promise<any> {
return new Promise( (resolve, reject) => {
return (function callEndpoint(callback): any {
try {
// gRPC call
resolve(client[methodName](req, options, callback));
} catch (err) {
reject(callback(err));
}
});
});
const result = await callEndpointWrapper();
// Above request times out.
【问题讨论】:
-
这段代码的作用有点令人困惑。基于回调的代码返回一个接受回调的函数,但返回的函数实际上是做一些异步工作的函数......你的意思是你需要像
await callEndpointWrapper()()......(注意2调用)?如果您没有在callEndpoint函数的闭包中传递任何可用的配置选项,那么拥有包装函数有什么意义? -
@nem035 感谢您的回复,它应该是一个单独的调用,即
await callEndPointWrapper(),并且在调用callEndpointWrapper之前,请求(req)和选项被设置为全局变量。跨度> -
你在使用
co吗? -
是的,我之前使用的包装器
co。
标签: javascript node.js callback promise