Javascript的異步編程:Promise

Promise對象是CommonJS工做組爲異步編程提供的統一接口,是ECMAScript6中提供了對Promise的原生支持,Promise就是在將來發生的事情,使用Promise能夠避免回調函數的層層嵌套,還提供了規範更加容易的對異步操做進行控制。提供了reject,resolve,thencatch等方法。node

使用Promise

Promise是ES6以後原生的對象,咱們只須要實例化Promise對象就能夠直接使用。
實例化Promise:git

var promise = new Promise(function (resolve, reject) {
    console.log('begin do something');
    if (Math.random() * 10.0 > 5) {
        console.log(" run success");
        resolve();
    } else {
        console.log(" run failed");
        reject();

    }
});

這裏定義了一個回調方法function(resolve,reject),若是成功了就調用resolve,失敗了就會調用reject。
Promise.prototype.then是Promise執行完以後的回調,能夠用then方法分別指定resolve和reject的回調。github

promise.then(function () {
    console.log(' resolve from promise');
}, function () {
    console.log(' reject from promise');
});

執行結果一:編程

begin do something
 run success
 resolve from promise

執行結果二:promise

begin do something
 run failed
 reject from promise

使用Promise進行網絡請求

getRequest = function (url) {
    var promise = new Promise(function (resolve, reject) {
        var request = require('request');
        request(url, function (error, respones, body) {
            if (error) {
                reject(error);
                return;
            }
            if (respones.statusCode == 200) {
                resolve(body)

            } else {
                reject(respones.status);

            }
        });
    });
    return promise;

};

getRequest("https://github.com/").then(function (result) {
    console.log(result);
}, function (error) {
    console.error('error', error);
});

使用Promise進行網絡請求,也能夠使用Promise在瀏覽上實現Ajax請求。網絡

代碼地址:https://github.com/jjz/nodedom

相關文章
相關標籤/搜索