如何创建从回调函数返回承诺的函数[重复]
Posted
技术标签:
【中文标题】如何创建从回调函数返回承诺的函数[重复]【英文标题】:How to create function that return promise from callback function [duplicate] 【发布时间】:2017-04-26 11:48:12 【问题描述】:我使用有 api 的 javascript 库。
libapi.callnetwork(arg1,callback(data)
//handle data
然后我创建服务函数来像这样调用 api
myFunction():Promise<any>
libapi.callnetwork(arg1,callback(data)
return new Promise(resolve=>resolve(data));
)
myFunction 会出错,因为它必须返回 promise 或声明为 void。如何创建从这个 api 返回承诺的函数?
【问题讨论】:
【参考方案1】:我们的想法不是从回调内部创建和返回承诺,而是在外部函数中创建它(您可以在其中 return
它)并且只解决回调中的承诺:
myFunction():Promise<any>
return new Promise(resolve =>
libapi.callnetwork(arg1, callback(data)
resolve(data);
);
);
或者干脆
myFunction():Promise<any>
return new Promise(resolve =>
libapi.callnetwork(arg1, resolve);
);
【讨论】:
【参考方案2】:Vanilla,获取解析函数
let myFunction = () =>
let resolve;
let promise = new Promise(r => resolve = r);
libapi.callnetwork(arg1, resolve);
return promise;
;
【讨论】:
没有。不要那样做。这就是为什么不推荐使用延迟。【参考方案3】:myFunction():Promise<any>
let resolveFn = (data) => data;
libapi.callnetwork(arg1, resolveFn);
return new Promise(resolveFn);
【讨论】:
以上是关于如何创建从回调函数返回承诺的函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在异步函数内部,从回调函数返回值返回 Promise(undefined) [重复]