获取TypeError:无法执行' fetch' on' Window':非法调用

时间:2017-06-23 11:32:51

标签: javascript node.js fetch

我尝试使用fetch来调用后端来自没有像Axios这样的库。

api.ts

export const sendSuggestion = ((data: any): Promise<any> => {
console.log(JSON.stringify(data));
const apiUrl = `/api/suggest/`;
return fetch(apiUrl, {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify(data)
}).then(checkStatus)
    .then(r => r.json())
    .then(data => {
        console.log(data);
    });
});

const checkStatus = ((response: any) => {
  if (response.ok) {
    return response;
  } else {
    var error = new Error(response.statusText);
    console.log(error);
  //return Promise.reject(error);
  }
})

我还包括npm模块,它是polyfill https://www.npmjs.com/package/unfetch并将其导入我的代码

 import fetch from 'unfetch'


 console.log(fetch) returns in console:
 function fetch() { [native code] } 

我无法理解问题所在。

3 个答案:

答案 0 :(得分:3)

使用取消删除你可以这样做:

const fetch = unfetch.bind();

如果你想使用窗口:

const fetch = window.fetch.bind(window);

答案 1 :(得分:3)

非常特定的用例,但是在构建Chrome扩展程序时遇到了这个问题。

问题在于,我应该在请求选项中将headers指定为对象列表(当它应该是对象时)。

我正在建立以下请求:

const requestOptions = {
  method: 'POST',
  searchParams: {
    code: code,
  },
  headers: [
    {'content-type': 'application/x-www-form-urlencoded'},
  ],
};
const getAccessToken = `https://example.com/oauth2/token`;
fetch(getAccessToken, requestOptions)
  .then(r => r.text())
  .then(token => {
    console.log('token is', token);
  });

我通过更改来修复它:

headers: [
  {'content-type': 'application/x-www-form-urlencoded'},
],

收件人:

headers: {
  'content-type': 'application/x-www-form-urlencoded',
},

答案 2 :(得分:0)

使用Axios代替Fetch为我解决了这个问题。