Promise

作者: JasonQiao | 来源:发表于2017-04-15 21:44 被阅读13次

作用:取代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

相关文章

网友评论

      本文标题:Promise

      本文链接:https://www.haomeiwen.com/subject/okdoattx.html