Обещание fetch никогда не выполняется

Я использую 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.

Итак, кажется, что нативный скрипт по какой-то причине отфильтровал ответ.

Кто-нибудь испытал это?


person onemach    schedule 15.03.2016    source источник


Ответы (2)


Обратите внимание, что ваш resp является объектом Response, если вы хотите прочитать его содержимое, вам нужно использовать одну из его функций: arrayBuffer, blob, formData, json или текст.

Эти функции читают ответ до завершения и возвращают обещание, которое разрешается с прочитанным значением.

Например,

fetch("http://202.120.227.11/")
.then(function(resp){
  return resp.json();
})
.then(function(val) {
  console.log(JSON.stringify(val));
  return val;
});
person Marco Castelluccio    schedule 15.03.2016

Я знаю, что это очень поздно, но я просто хотел опубликовать сообщение, если кто-нибудь столкнется с этой же проблемой. Я столкнулся с той же проблемой с NativeScript, и мое решение состояло в том, чтобы защитить мой сайт/конечные точки. Политика безопасности транспорта приложений требует использования безопасного соединения. Поэтому http работать не будет. Вы должны подключиться через https.

person Dillon Lundell    schedule 16.02.2017