美文网首页
如何把 Callback 接口包装成 Promise 接口

如何把 Callback 接口包装成 Promise 接口

作者: 凡凡的小web | 来源:发表于2020-03-10 23:31 被阅读0次

    如何将callback接口变成Promise接口?
    ···
    var promisify = function promisify(fn, receiver) {
    return function() {
    for(var _len = argument.length, args = Array(_len), _key = 0; _key<_len; _key++) {
    args[_key] = arguments[_key];
    }

        return new Promise(function (resolve, reject) {
          fn.apply(receiver, [].concat(args,[function(err, res){
             return err ? reject(err) : resolve(res);
          }]));
     });   
    

    };
    };
    ···
    通过 promisify这个函数,就可以把接口进行转换。

    上面的模板就可以改成下面的形式:
    ···
    var promisify = function promisify(fn, receiver) {
    return function() {
    for(var _len = argument.length, args = Array(_len), _key = 0; _key<_len; _key++) {
    args[_key] = arguments[_key];
    }

        return new Promise(function (resolve, reject) {
          fn.apply(receiver, [].concat(args,[function(err, res){
             return err ? reject(err) : resolve(res);
          }]));
     });   
    

    };
    };
    ···

    特殊情况

    有些设计不合理的接口可能会传递多个值给回调函数,如:
    ···
    var fn = function(foo, callback){
    if(success){
    callback(null, file1, file2);
    }else{
    callback(err);
    }
    }
    ···
    很明显 这个接口传了 file1,file2两个值,是没有办法用上述方法的,用了上述接口转换没有办法获取到file2的数据。

    对于这种情况只能手工包装。

    提高性能

    可以使用高性能的Promise库来提高性能。如:bluebird。简单对比测试发现,blurbird 的性能是 V8 里内置的 Promise 3 倍左右.

    替换内置的Promise:

    global.Promise = require("bluebird");
    如果项目里用了 Babel 编译 ES6 代码的话,可以用下面的方式替换:如果项目里用了 Babel 编译 ES6 代码的话,可以用下面的方式替换:

    require("babel-runtime/core-js/promise").default = require("bluebird");
    global.Promise = require("bluebird");

    Node.js 8 中的 util.promisify使用
    https://blog.csdn.net/weixin_33756418/article/details/91384889

    https://www.jb51.net/article/115967.htm

    原文
    http://welefen.com/post/how-to-convert-callback-to-promise.html

    https://www.cnblogs.com/hsprout/p/5588859.html

    相关文章

      网友评论

          本文标题:如何把 Callback 接口包装成 Promise 接口

          本文链接:https://www.haomeiwen.com/subject/xncodhtx.html