提问者:小点点

如何从回调函数[重复]中创建返回promise函数


我使用带有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?


共3个答案

匿名用户

其思想不是从回调内部创建和返回承诺,而是在外部函数中创建它(在该函数中可以returnit),并且只从回调解析承诺:

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

匿名用户

Vanilla,抓取resolve函数

let myFunction = () => {
    let resolve;
    let promise = new Promise(r => resolve = r);
    libapi.callnetwork(arg1, resolve);
    return promise;
};

匿名用户

myFunction():Promise<any>{
  let resolveFn = (data) => data;
  libapi.callnetwork(arg1, resolveFn);
  return new Promise(resolveFn);
}