测试promise,请问我这样写为什么得到我预期的?
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 能稍加解释么?大神
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