Callback → Async
↓
Promise
↓
Co(Generator/yield+Promise)
↓
Async/await
new Promise(function (resolve, reject) {
setTimeout(function () {
resolve('成功');
}, 3000);
});
状态转换成Fulfilled或Rejected之后,不在发生变化
function p1(count) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(count);
}, 3000);
})
}
function p2(count) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(count + 1);
}, 1000);
});
}
p1(1).then(p2).then(function (data) {
console.log(data, Date.now() - time);
}).catch(function () {
// 失败时调用的函数
});
var time = Date.now();
new Promise(function (resolve, reject) {
setTimeout(function () {
resolve('成功');
}, 3000);
}).then(function () {
// 成功时调用的函数
}, function () {
// 失败时调用的函数
}).catch(function () {
// 失败时调用的函数
});
new Promise(function(resolve){
resolve('Berwin');
});
// 快捷方式
Promise.resolve('Berwin');
new Promise(function(resolve,reject){
reject(new Error('报错了~'));
});
// 快捷方式
Promise.reject(new Error('报错了~'));
var promise1 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve('promise1');
}, 3000);
});
var promise2 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve('promise2');
}, 1000);
});
var time = Date.now();
Promise.all([promise1, promise2]).then(function (results) {
console.log(results);
console.log(Date.now() - time);
});
var promise1 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve('promise1');
}, 3000);
});
var promise2 = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve('promise2');
}, 1000);
});
var time = Date.now();
Promise.race([promise1, promise2]).then(function (results) {
console.log(results);
console.log(Date.now() - time);
});
Promise.resolve('hello').then(function (value) {
if (Math.random() < 0.5) {
throw new Error('err!');
} else {
return value;
}
}).done(function (data) {
console.log(data);
}, function (err) {
console.log(err);
});
Promise.resolve('hello').then(function (value) {
if (Math.random() < 0.5) {
throw new Error('finally err!');
} else {
return value;
}
}).then(function (value) {
console.log(value); // => 'hello'
}, function (err) {
console.log(err); // => finally err!
}).finally(function () {
console.log('finish') // always called
});
// denodeify
var readFile = Promise.denodeify(require('fs').readFile);
readFile('denodeify.txt', 'utf8').then(JSON.parse);
// nodeify
var readFile = Promise.denodeify(require('fs').readFile);
function readJson(filename, callback) {
return readFile(filename, 'utf8').then(JSON.parse).nodeify(callback);
}