一个封装了异步操作的Promise对象实际上并没有做任何事件,它仅仅针对回调函数的不同结果定义了不同的状态 。 resolve和reject方法也没有做多余的操作,仅仅是把异步结果传递出去而已,对于异步结果的处理,是交给then方法来完成的。 使用then方法来完成
var fs = require('fs')
function readFile_promise(path){
return new Promise(function(resolve,reject){
fs.readFile(path,'utf-8',function(err,data){
if(data){
resolve(data)
}else{
reject(err)
}
})
})
}
var promise = readFile_promise('./abc.txt');
promise.then(function(data){
//success
},function(err){
//fail
})
then方法总是返回一个新的promise对象 ,这就表示可以多次then,由于默认返回的Promise是个空对象 ,除非做些额外的操作,否则这操作得不到有意义的值。
var promise = readFile_promise('./abc.txt');
promise.then(function(data){
//success
})
.then(function(value){ //再次调用then
console.log(value) //undefined 没意义
})
可以在回调函数里定义个新的Promise 然后Return返回。
var promise = readFile_promise('./abc.txt');
promise.then(function(data){
//success
return readFile_promise('./bb.txt');
})
.then(function(value){ //再次调用then
console.log(value) //'bb.txt' 这样就可以获取另一个异步操作的结果了
})
来源:oschina
链接:https://my.oschina.net/u/560237/blog/3215476