24.16 与传统异步代码对接

当你使用一个 Promise 库的时候,有些时候需要使用非基于 Promise 的异步代码。本节讲解了对于 Node.js 风格的异步函数和 jQuery deferreds ,如何对接。

24.16.1 与 Node.js 对接

Promsie 库 Q 有几个工具方法用于把使用 Node.js 风格 (err,result) 回调函数作为参数的函数转换成返回 Promise 的函数(甚至有做反向转换的函数 - 将基于 Promise 的函数转换成接收回调函数的函数)。例如:

let readFile = Q.denodeify(FS.readFile);

readFile('foo.txt', 'utf-8')
.then(function (text) {
    ···
});

denodify 是一个小型的库,仅提供转换功能,转换成符合 ECMAScript 6 Promise API 标准的形式。

24.16.2 与 jQuery 对接

jQuery 有 deferreds ,和 Promise 很像,但是有几处不同导致无法兼容。 deferreds 的方法 then() 非常像 ES6 Promsie 的 then() (主要不同点: deferreds 并不会在响应器中捕获异常)。所以,可以使用 Promise.resolve() 把 jQuery deferred 转换成 ES6 Promise :

Promise.resolve(
    jQuery.ajax({
        url: 'somefile.html',
        type: 'GET'
    }))
.then(function (data) {
    console.log(data);
})
.catch(function (reason) {
    console.error(reason);
});

results matching ""

    No results matching ""