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);
});