2016-02-12 57 views
3

這是我的意思。是否有可能重寫本機提取api使用所需的Promise庫而不是本地瀏覽器Promise?

如果瀏覽器本身支持fetch api(例如Chrome),則它使用本地瀏覽器Promise

如果我使用另一個Promise庫(例如bluebird),本機fetch仍然沒有使用它 - 它使用本地Promise實現。

有沒有辦法來覆蓋那個?

問題例如:

window.Promise = function() { return null; }; 


fetch('/api') 
.then(function (res) { 
    console.log('fetch result!', res); // still works because it uses native Promise 
}); 

爲什麼我必須說,你可能想知道?我希望使用global rejection events其中bluebird庫支持和原生Promise沒有。

+1

瀏覽器不關心你是否使用承諾庫,它只知道它自己的承諾。它不會自動更改爲不同的實現。 – Reda

回答

2

您可以在fetch承諾上使用藍鳥Promise.resolve()。它將創造一個藍色的承諾,同化fetch的承諾。

Promise.resolve(承諾|任意值) - >無極

創建與給定值解決的承諾。如果值已經是可信的Promise,它將按原樣返回。如果價值不是可行的,則履行的承諾以價值作爲履行價值返回。如果value是一個可接受的(類似於Promise的對象,就像jQuery的$ .ajax返回的那樣),返回一個可信任的Promise來同化該對象的狀態。

http://bluebirdjs.com/docs/api/promise.resolve.html

1

下面是一些代碼,在同一直線上去爲@MinusFour建議。如果您在瀏覽器中而不在模塊內,請將global替換爲window

const fetch = global.fetch 
global.fetch = function() { 
    return Promise.resolve(fetch.apply(global, arguments)) 
} 
+0

好的,這可能會做到。我會測試它並報告返回 – timetowonder

+0

@timetowonder爲您工作嗎? –

相關問題