// Promise
// promise 相当于异步操作结果的占位符,它不会去订阅一个事件,也不会传递一个回调函数给目标函数
// 而是让一个函数返回一个Promise
// Promise的生命周期 先处于进行中(pending),
// 当操作结束会处于 Fullfilled Promise异步操作完成
// Rejected 由于程序的一些错误或一些其他原因,Promise
// 操作没有完成
/*let promise = readFile("example.txt");
promise.then(function(contents) {
// 完成
console.log(contents);
}, function(err) {
// 拒绝
console.errot(err.message);
})*/
// 非Promise的Thenable对象
/*let thenable = {
then : function(resolve, reject) {
resolve(42);
}
}
let p1 = Promise.resolve(thenable);
p1.then(function(value) {
console.log(value); // 42
})*/
// Promise.resolve()调用的是thenable.then(),所以Promise的状态可以被检测到。
// 由于是在then()方法内部调用了resolve(42),因此Thenable对象的Promise状态是
// 完成的。新创建的已完成的状态Promise p1 从Thenable对象接受传入的值(也就是42),
// p1的完成处理程序将42赋值给形参value
/*let promise = new Promise(function(resolve, reject) {
throw new Error("Explosion!");
})
promise.catch(function(error) {
console.log(error.message)
})*/
// 串联Promise
/*let p1 = new Promise(function(resolve, reject) {
resolve(42);
});
p1.then(function(value) {
console.log(value);
}).then(function() {
console.log("Finished");
});*/
// Promise链的返回值
// 在拒绝处理程序中也可以做同样的事情
/*p1.then(function(value) {
console.log(value); // 42
return value + 1;
}).then(function(value) {
console.log(value); // 43
})*/
// 在Promise中返回Promise
/*let p2 = new Promise(function(resolve, reject) {
resolve(43);
});
// 此时p1.then 返回的是另一个Promise
p1.then(function(value) {
// 第一个完成处理程序
console.log(value);
return p2;
}).then(function(value) {
// 第二个完成处理程序
console.log(value); // 43
})*/