测试promise,请问我这样写为什么得到我预期的?
发布于 3 年前 作者 cool-firer 1981 次浏览 来自 问答
var Promise = require('bluebird')
var obj = {
    func1: function () {
        return 'hehe'
    },
    func2: function () {
        return 'xix'
    }
}
console.log("==================================")
Promise.promisifyAll(obj)

obj.func1Async().then(function (result) {
    console.log(result)
})

定义一个obj对象,把它promise化,本来想通过异步函数func1Async再调用then可以得到fun1的返回值,结果程序什么输出也没有? 是我理解错了么?求大神解答

8 回复

应该用回调

我记得promisifyAll要求函数的参数都是node模式的,即两个参数,一个err,一个data

@steambap 那怎么写? var obj = { func1: function (err, data) { return ‘foo’ }, func2: function () { return ‘bar’ } } 这样么?也不行啊

@eggggger 怎么弄,头疼。

var Promise = require('bluebird')
var obj = {
    func1: function (callback) {
        return callback(null, 'hehe');
    },
    func2: function (callback) {
        return callback(null, 'xix');
    }
}
console.log("==================================")
Promise.promisifyAll(obj)

obj.func1Async().then(function (result) {
    console.log(result)
})

一直不敢用这个- -不知道该怎么用- -原来是node类似的就可以了学习了

@KingTree 能稍加解释么?大神

@cool-firer

fs.readFile函数封装成Promise :

var promisifyFS = function(path, encode){
    return new Promise(function(resolve, reject){
        fs.readFile(path, encode, function(err, result){
           if(err){
              return reject(err);
           }
           return resolve(result);
        });
    });
};

promisifyFS('file1.txt', 'utf8').then(function(file1){
    console.log(file1);
});

所以说 Promise.promisifyAll 只能把带有callback 的函数才能转成Promise。

具体的去看 => 自己动手实现一个简单的Promise/A+的Promisify函数 https://cnodejs.org/topic/56cd6234e135f51a1ae89b15

回到顶部