Promise.js 是 Promises 的轻量级 JavaScript 实现

Promise.js 是 Promises 的轻量级 JavaScript 实现,Promises 提供了 callback-passing 的替代方案,异步函数返回一个 Promise 对象可附加到 callbacks 中。

Promise.js 是 Promises 的轻量级 JavaScript 实现

使用 Promise 对象

Promise 提供一个替代的回调传递。异步函数返回一个承诺对象上回调可以连接。回调连接使用 .then(callback) 的方法。他们将被称为当 Promise 得到解决。

var p = asyncfoo(a, b, c);

p.then(function(error, result) {

    if (error) return;

    alert(result);

});

异步函数必须解决的 Promise,.done() 法当他们的任务完成了。这个调用回调的函数具有相同的参数,通过 .done()

function asyncfoo() {

    var p = new promise.Promise();  /* (1) create a Promise */

    setTimeout(function() {

        p.done(null, "O hai!");     /* (3) resolve it when ready */

    }, 1000);

    return p;                       /* (2) return it */

}

回调函数关键字

虽然任意数量的参数接受回调,推荐使用以下方式:callback(error, result)

error参数可以用来传递错误代码,例如 error != false 的情况下出错;result 参数是用来传递由异步任务产生的值。这允许回调是这样写的:

function callback(error, result) {

    if (error) {

        /* Deal with error case. */

        ...

        return;

    }

    /* Deal with normal case. */

    ...

}

链接异步函数

有两种方式调用异步函数的链接。第一个是使回调承诺对象和.then()调用链。事实上.then()返回一个Promise ,是解决当回调解决承诺。

function late(n) {

    var p = new promise.Promise();

    setTimeout(function() {

        p.done(null, n);

    }, n);

    return p;

}

late(100).then(

    function(err, n) {

        return late(n + 200);

    }

).then(

    function(err, n) {

        return late(n + 300);

    }

).then(

    function(err, n) {

        return late(n + 400);

    }

).then(

    function(err, n) {

        alert(n);

    }

);

另一种选择是使用promise.chain()。该函数希望每个返回一个承诺的异步函数的数组promise.chain()本身回报承诺的Promise

promise.chain([f1, f2, f3, ...]);

function late(n) {

    var p = new promise.Promise();

    setTimeout(function() {

        p.done(null, n);

    }, n);

    return p;

}

promise.chain([

    function() {

        return late(100);

    },

    function(err, n) {

        return late(n + 200);

    },

    function(err, n) {

        return late(n + 300);

    },

    function(err, n) {

        return late(n + 400);

    }

]).then(

    function(err, n) {

        alert(n);

    }

);

衔接函数

promise.join([p1, p2, p3, ...]);

promise.join()期待一个Promise对象的数组,并返回一个Promise ,将得到解决,一旦所有的参数已经解决。该回调将通过一个数组,其中包含每个Promise传递的值,在相同的顺序中给出了承诺。

function late(n) {

    var p = new promise.Promise();

    setTimeout(function() {

        p.done(null, n);

    }, n);

    return p;

}

promise.join([

    late(400),

    late(800)

]).then(

    function(results) {

        var res0 = results[0];

        var res1 = results[1];

        alert(res0[1] + " " + res1[1]);

    }

);

AJAX功能包括

因为Ajax请求是异步JavaScript多少根,promise.js提供以下功能:

promise.get(url, data, headers)

promise.post(url, data, headers)

promise.put(url, data, headers)

promise.del(url, data, headers)

data(optional) : a {key: value} object or url-encoded string.

headers(optional) : a {key: value} object (e.g. {"Accept": "application/json"}).

使用举例

promise.get('/').then(function(error, text, xhr) {

    if (error) {

        alert('Error ' + xhr.status);

        return;

    }

    alert('The page contains ' + text.length + ' character(s).');

});

你可以设置之后,反应迟钝的Ajax请求,应中止以毫秒为单位的时间。这是一个全局配置选项,默认情况下禁用。

/* Global configuration option */

promise.ajaxTimeout = 10000;

浏览器兼容

这个插件库在IE5.5+ 和 FF1.5+浏览器中测试通过,意味着可以完美的运行而无需考虑兼容性问题。

相关链接

Github地址:https://github.com/stackp/promisejs

以上是 Promise.js 是 Promises 的轻量级 JavaScript 实现 的全部内容, 来源链接: utcz.com/p/232216.html

回到顶部