var fs = require('fs')
var p1 = new Promise(function (resolve, reject) {
fs.readFile('./data/a1.txt', 'utf8', function (err, data) {
if (err) {
reject(err)
} else {
// console.log(data);
resolve(data)
}
})
})
var p2 = new Promise(function (resolve, reject) {
fs.readFile('./data/b.txt', 'utf8', function (err, data) {
if (err) {
reject(err)
} else {
// console.log(data);
resolve(data)
}
})
})
var p3 = new Promise(function (resolve, reject) {
fs.readFile('./data/c.txt', 'utf8', function (err, data) {
if (err) {
reject(err)
} else {
// console.log(data);
resolve(data)
}
})
})
// 写法1: 在.then的第二个参数指定错误回调 后续代码会继续执行 项目中不想后续代码继续执行
// 一般在最后使用.catch(err => { throw err }) 捕获错误 一旦捕获 后续代码不再执行
p1
.then(function (data) {
console.log(data);
// 当 p1 读取成功的时候
// return {}
// 当函数中 return 的结果就可以在后面的 then 中 funcion 接收到
// 当你 return 123 后面就接收到 123
// return 'hello' 后面就接收到 'hello'
// 没有 return 后面接收到的就是 undefined
// 上面那些 return 的数据没什么卵用
// 真正有用的是 :我们可以 return 一个 Promise 对象
// 当 return 一个 Promise 对象的时候,后续的 then 方法中的第一个参数函数会作为 p2 的 resolve
return p2
}, function (err) {
console.log('读取文件失败', err);
return p2
})
.then(function (data) {
console.log(data);
return p3
})
.then(function (data) {
console.log(data);
console.log('end');
})
// Promise扩展
new Promise(resolve => {
resolve();
}).then(res => {
console.log(res); // => undefined
});
new Promise(resolve => {
resolve('hello world');
}).then(res => {
console.log(res); // => hello world
});
new Promise(resolve => {
resolve({ code: 0, data: { name: 'jerry', age: 19 }, status: 200, msg: 'success' });
}).then(res => {
console.log(res); // => {code: 0, data: {name: "jerry", age: 19}, status: 200, msg: "success"}
});
// 当resolve参数为Promsie对象时 后面.then(() => {}) 指定的第一个成功回调函数为resolve参数(Promise)的resolve
var promsie = new Promise(resolve => {
console.log('begin');
resolve('then')
})
new Promise(resolve => {
resolve(promsie);
}).then(res => {
console.log(res); // => then
});
// => begin then
new Promise(resolve => {
console.log(1);
resolve();
})
.then((res) => {
console.log(2, res);
})
.then((res) => {
console.log(3, res);
return { code: 0, data: { name: 'Jerry', age: 20 }, status: 200, msg: 'success' }
})
.then((res) => {
console.log(4, res);
});
// =>
// 1
// 2 undefined
// 3 undefined
// 4 {code: 0, data: {name: "Jerry", age: 20}, status: 200, msg: "success"}
let thenable = {
then: function (resolve, reject) {
resolve('hello world');
}
};
let p1 = Promise.resolve(thenable);
p1.then(function (value) {
console.log(value); // => hello world
});
let thenable = {
then123: function (resolve, reject) {
resolve(42);
}
};
let p1 = Promise.resolve(thenable);
var promise = p1.then(function (value) {
console.log(value); // => {then123: function(resolve, reject){}}
});
console.log(promise); // => Promise{__proto__: Promise, [[PromiseStatus]]: "resolved", [[PromiseValue]]: undefined}
const p = Promise.resolve("Hello");
p.then(function (s) {
console.log(s); // => Hello
});
// Promise.resolve(参数) 参数为Promsie对象时 后续.then((res) => {}) 指定的第一个成功回调函数为resolve
var promise = new Promise(resolve => {
console.log('begin');
resolve('then')
})
Promise.resolve(promise).then(res => {
console.log(res); // then
})
// =>
// begin
// then
网友评论