作用:取代event和callback
创建unsettled Promise
new Promise(function(resolve, reject){
//code goes here
})
创建settled Promise
Promise.resolve()
Promise.reject()
如果给这两个方法传递一个Promise,那就原封不动返回。
非Promise thenable可以传递给上面两个方法,用来兼容老的JS库。
Promise schedule jobs to be added to the Javascript engine's job queue for future execution, and a second job queue tracks promise fulfillment and rejection handlers to ensure proper execution.
Promise三种状态:pending, fulfilled, rejected
Promise.then():可以绑定一个fulfillment handler和一个rejection handler。
Promise.catch():只绑定一个rejection handler。
链式操作
Promise.then和Promise.catch均返回Promise,可以链式操作。
Global Promise Rejection Handler
对于Promise,可以不绑定rejection handler,这就埋下了隐患,为此可以建立一个全局Promise Rejection Handler。
响应多个Promise
Promise.all():给定的所有promise全都fulfilled,返回的promise才fulfilled,如果遇到一个rejected的则返回的promise直接rejected。
Promise.race():给定的所有promise第一个fulfilled,则返回的promise也fulfilled,如果第一个rejected,则返回的promise也rejected。
Promise与Generator结合处理异步任务
let fs = require("fs");
function run(taskDef) {
// create the iterator
let task = taskDef();
// start the task
let result = task.next();
// recursive function to iterate through
(function step() {
// if there's more to do
if (!result.done) {
// resolve to a promise to make it easy
let promise = Promise.resolve(result.value);
promise.then(function(value) {
result = task.next(value);
step();
}).catch(function(error) {
result = task.throw(error);
step();
});
}
}());
}
// define a function to use with the task runner
function readFile(filename) {
return new Promise(function(resolve, reject) {
fs.readFile(filename, function(err, contents) {
if (err) {
reject(err);
} else {
resolve(contents);
}
});
});
}
// run a task
run(function*() {
let contents = yield readFile("config.json");
doSomethingWith(contents);
console.log("Done");
});
ES2017中Async与Await