是否可以覆盖本机获取 API 以使用所需的承诺库而不是本机浏览器承诺
Is it possible to override native fetch api to use a desired Promise library instead of native browser Promise?
这就是我的意思。
如果浏览器原生支持 fetch api(例如 Chrome),则它使用原生浏览器 Promise
.
如果我使用另一个 Promise 库(例如蓝鸟),原生fetch
仍然没有使用它——它使用原生Promise
实现。
有没有办法覆盖它?
问题示例:
window.Promise = function () { return null; };
fetch('/api')
.then(function (res) {
console.log('fetch result!', res); // still works because it uses native Promise
});
为什么我需要那个,你可能想知道?我希望利用bluebird
库支持和本机承诺所没有的全局拒绝事件。
下面是一些与@MinusFour建议相同的代码。如果您使用的是浏览器而不是模块内部,请将global
替换为window
。
const fetch = global.fetch
global.fetch = function() {
return Promise.resolve(fetch.apply(global, arguments))
}
你可以在fetch
承诺上使用蓝鸟Promise.resolve()
。它将创造一个蓝鸟的承诺,吸收fetch
承诺。
Promise.resolve(Promise|any value) -> Promise
创建一个使用给定值解析的承诺。如果 value 已经是受信任的 Promise,则按原样返回。如果值不是当时可取的,则返回已履行的承诺,并将值作为其履行值。如果 value 是一个可 thenable(类似 Promise 的对象,如 jQuery 的 $.ajax 返回的对象),则返回一个受信任的 Promise,该 Promise 吸收了 thenable 的状态。
http://bluebirdjs.com/docs/api/promise.resolve.html
发现了这个,并认为在这里发布它可能是有意义的 -https://github.com/github/fetch/issues/417
帖子说(如果链接断开)-如果你想在浏览器中使用蓝鸟,请使用这个,和
window.fetch = null
窗。承诺=蓝鸟
require('whatwg-fetch') 最新版本的浏览器可能有 fetch API 如果有获取 API,此存储库将返回 false。
如果你想在 Node 中使用 Bluebird,请使用 node-fetch,以及
let fetch = require('node-fetch');
获取。承诺=蓝鸟
- '图片'没有用于本机道具的propType'RCTImageView.overlayColor&
- 在iOS和Android上使用React native时,我还能使用本机第三方lirbraries吗
- javascript函数访问ios本机功能
- 如何在从客户端接收数据时从本机方法触发javascript函数?
- 在浏览器中检测本机或第三方PDF插件
- 将事件发送到javascript文档的react本机模块是否正确
- 将对应用内购买的支持构建为react本机代码
- 如何在Windows上用javascript构建本机应用程序
- 在视图中渲染多个按钮以编程方式进行本机反应
- 在本机挂钩之前加载可安装挂钩
- 如何使用UI Automation JavaScript Reference for iOS appium获取本机应用程
- 控制台中的“function floor(){[本机代码]}”是什么
- 如何将chrome.tabCapture流从js传递到c++PNACL本机代码
- WKWebview-Javascript和;本机代码
- 是否可以覆盖本机 Es6 承诺解析方法
- 是否可以覆盖本机获取 API 以使用所需的承诺库而不是本机浏览器承诺
- 反应本机导航在承诺后不渲染
- 本机浏览器承诺为一组查询的元素提供服务
- 如何使用本机 JavaScript 承诺执行延迟模式
- 当“循环”时,不能在本机承诺之间传递数据;他们