如何从图书馆创建承诺

Tre*_*vor 2 javascript promise

我对此感到困惑,因为到目前为止我找到的每个教程都假定我可以编辑库代码,或者库只有回调或回调作为最后一个参数.

我正在使用的库具有各种功能设置 function(successCallBack(result), FailCallBack(error),options)

所以在每个实例中,我最终都使用了像

var options={stuff1:1, stuff2:2};

doStuff(success,failure,options);

function success(result){
    //handle, usually with another call to a similar function, chaining callbacks together
};

function failure(error){
     //handle error
};
Run Code Online (Sandbox Code Playgroud)

当我只能控制呼叫,成功和失败时,如何将这些转换为承诺?

此外,作为奖励,链条正在访问它们之外的变量.

var options={stuff1:1, stuff2:2};

doStuff(success,failure,options);

function success(result){
    var options2={stuff1:1, stuff2:2};
    doStuff2(function(result2){
                processStuff(result1, result2);
            },function(error){
                 //handle error
            },options2)
};

function failure(error){
     //handle error
};

function processSuff(result1,result2){
    //do things to results
}
Run Code Online (Sandbox Code Playgroud)

谢谢

ale*_*mac 6

您可以使用以下功能.它接受promisify和options的函数,并返回promise:

let promisify = (fn, opts) => {
  return new Promise((resolve, reject) => {
    fn(resolve, reject, opts);
  });
}
Run Code Online (Sandbox Code Playgroud)

它可以使用如下:

promisify(doStuff, options)
  .then(data => console.log('Success call', data))
  .catch(err => console.log('Error', err));
Run Code Online (Sandbox Code Playgroud)