如何创建从回调函数返回承诺的函数[重复]

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);

【讨论】:

以上是关于如何创建从回调函数返回承诺的函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在回调结束时获得通知承诺所有回调样式[重复]

Node.js 从函数返回一个承诺

在异步函数内部,从回调函数返回值返回 Promise(undefined) [重复]

在异步函数内部,从回调函数返回值返回 Promise(undefined) [重复]

Promise承诺对象

在承诺回调中发送数组响应,但响应为空白