it-roy-ru.com

ES6 `выборка не определена`

Я создаю сайт с ES6 и Babel.

В файле сценария мне нужно сделать ajax-вызов службы на сервере. Для этого я делаю так:

fetch('url').then(
    response => response.json()
).then(
    supervisoryItems => doSomething(supervisoryItems)
)

В Google Chrome это работает просто отлично, но не работает в Firefox или IE (я получаю ошибку fetch is undefined) . Поиск в Google обнаружил, что это должно исправить это:

import promise from 'es6-promise'
promise.polyfill()

К сожалению, это ничего не меняет, у меня та же проблема. Любая помощь?

38
Pablo

Вам нужно добавить модуль «isomorphic-fetch» ​​в ваш «package.json» и затем импортировать его.

npm install --save isomorphic-fetch es6-promise

Тогда в вашем коде

import "isomorphic-fetch"

Смотрите https://www.npmjs.com/package/isomorphic-fetch

67
Kieran Johnson

Я буду использовать два следующих CDN, как это:

<script src="//cdn.jsdelivr.net/bluebird/3.5.0/bluebird.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/2.0.3/fetch.js"></script>
11
Thomas

Babel-polyfill ( http://babeljs.io/#polyfill ) в настоящее время не включает выборку в polyfill. Я думал добавить это все же.

Но да можно использовать https://github.com/github/fetch

4
hzoo

Вы также можете использовать пакеты ProvidePlugin с пакетами import-loader и exports-loader packages, как описано в этот ответ , что устраняет необходимость импортировать что-либо в ваш код:

config.plugins = [
    new webpack.ProvidePlugin({
      'fetch': 'imports-loader?this=>global!exports-loader?global.fetch!whatwg-fetch'
    })
];

На момент написания этой статьи существует проблема совместимости с версией 3.0.0 whatwg-fetch. Обходной путь использует следующее:

new webpack.ProvidePlugin({
    fetch: 'exports-loader?self.fetch!whatwg-fetch/dist/fetch.umd'
})
1
Scott Martin

Просто прошел через эту ночь. В конце концов, после всех возможных попыток, решение было довольно простым:

fetch('url').then(
response => response.json()
).then(
supervisoryItem => doSomething(supervisoryItem)
)

стал

window.fetch('url').then(
response => response.json()
).then(
supervisoryItem => doSomething(supervisoryItem)
)

TL; DR fetch (вещи) должен быть окно . Fetch (вещи) EDITЭто работало для меня на Chrome

1
Salvatore