fetch Promise 永远不会被执行

Posted

技术标签:

【中文标题】fetch Promise 永远不会被执行【英文标题】:fetch Promise never gets executed 【发布时间】:2016-06-30 13:38:42 【问题描述】:

我正在使用 nativescript 为 android 开发应用程序。 我有类似的东西

var fetchModule = require("fetch");
fetchModule.fetch("http://202.120.227.11/")
    .then(function(resp)
        console.log(JSON.stringify(resp));
        return resp;
    )
    .catch(function(err)
        console.log(JSON.stringify(err));
        return err;
    );

但是then 块永远不会被执行。 有时catch 块被执行并给出网络错误。 但是无论哪种情况,根据我的 tcpdump 记录,请求都被发送并顺利收到响应。

所以,nativescript 似乎出于某种原因过滤了响应。

有人经历过吗?

【问题讨论】:

【参考方案1】:

请注意,您的resp 是一个Response 对象,如果您想读取它的内容,您需要使用它的功能之一:arrayBuffer、blob、formData、json 或@ 987654326@.

这些函数读取完成的响应并返回一个使用读取值解析的承诺。

例如,

fetch("http://202.120.227.11/")
.then(function(resp)
  return resp.json();
)
.then(function(val) 
  console.log(JSON.stringify(val));
  return val;
);

【讨论】:

【参考方案2】:

我知道这已经很晚了,但我只是想发帖以防万一有人遇到同样的问题。我在使用 NativeScript 时遇到了同样的问题,我的解决方案是保护我的站点/端点。应用传输安全策略需要使用安全连接。因此,http 将不起作用。您必须通过 https 连接。

【讨论】:

以上是关于fetch Promise 永远不会被执行的主要内容,如果未能解决你的问题,请参考以下文章

Redux-Saga ES6类语法方法在调度操作时不会被调用

addEventListener('fetch', callback) 在 ReactJS 中永远不会触发回调

当 Promise 永远不会解决时会发生啥? [复制]

来自 Promise 的数据永远不会在组件中呈现

承诺要么永远不会被调用,要么被拒绝(Parse JS SDK)

.then() 在嵌套的 promise.all 和 fetch 完成之前执行