Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用承诺回应本机NetInfo_Javascript_Asynchronous_Promise_React Native - Fatal编程技术网

Javascript 用承诺回应本机NetInfo

Javascript 用承诺回应本机NetInfo,javascript,asynchronous,promise,react-native,Javascript,Asynchronous,Promise,React Native,我在react native中有一个修改过的代码,用于使用服务器获取数据,效果很好。我想添加NetInfo,以便在提取之前始终检查电话是否连接到internet。在承诺中它是可能的吗?如何将此异步函数连接到我的代码 'use strict'; var MAX_WAITING_TIME = 30000 var processStatus = function (response) { // status "0" to handle local files fetching (e.g.

我在react native中有一个修改过的代码,用于使用服务器获取数据,效果很好。我想添加NetInfo,以便在提取之前始终检查电话是否连接到internet。在承诺中它是可能的吗?如何将此异步函数连接到我的代码

'use strict';

var MAX_WAITING_TIME = 30000

var processStatus = function (response) {
    // status "0" to handle local files fetching (e.g. Cordova/Phonegap etc.)
    if (response.status === 200 || response.status === 0 || response.status === 201 || response.status === 422 || response.status === 302 ) {
        return Promise.resolve(response)
    } else if(response.status === 413) {
         return Promise.reject(alert(____mobile.connection_error.large_file))
    } else {
        //return Promise.reject(alert("Process status: "+JSON.stringify(response )))
        return Promise.reject(alert(____mobile.connection_error.top));
        console.log("Process status: "+JSON.stringify(response ));
    }
};

var parseJson = function (response) {
    return response.json();
};

var getWrappedPromise = function () {
    var wrappedPromise = {},
            promise = new Promise(function (resolve, reject) {
                wrappedPromise.resolve = resolve;
                wrappedPromise.reject = reject;
            });
    wrappedPromise.then = promise.then.bind(promise);
    wrappedPromise.catch = promise.catch.bind(promise);
    wrappedPromise.promise = promise;// e.g. if you want to provide somewhere only promise, without .resolve/.reject/.catch methods
    return wrappedPromise;
};

/* @returns {wrapped Promise} with .resolve/.reject/.catch methods */
var getWrappedFetch = function () {
    var wrappedPromise = getWrappedPromise();
    var args = Array.prototype.slice.call(arguments);// arguments to Array

    fetch.apply(null, args)// calling original fetch() method
        .then(function (response) {
            wrappedPromise.resolve(response);
        }, function (error) {
           // wrappedPromise.reject(alert("Fetch status: " + error));
            wrappedPromise.reject(____mobile.connection_error.top);
            console.log("Fetch status: " + error);
        })
        .catch(function (error) {
            wrappedPromise.catch(error);
        });
    return wrappedPromise;
};

/**
 * Fetch JSON by url
 * @param { {
 *  url: {String},
 *  [cacheBusting]: {Boolean}
 * } } params
 * @returns {Promise}
 */
var postJSON = function (params) {
    var headers1 = {}
    if (params.json){
        headers1 = {
            'Accept': 'application/json',
            'Content-Type': 'application/json'}
    } 

    if (params.headersIn){
        headers1 = params.headersIn
    }

   var methodTmp = 'POST'

    if (params.methodIn) {
        methodTmp = params.methodIn
    }
    console.log(methodTmp)
    var wrappedFetch = getWrappedFetch(
        params.cacheBusting ? params.url + '?' + new Date().getTime() : params.url,
        {
            method: methodTmp,//'POST',// optional, "GET" is default value
            headers: headers1,

            body: params.send_data
        });

    var timeoutId = setTimeout(function () {
        wrappedFetch.reject(alert(____mobile.connection_error.timeout, ____mobile.connection_error.check_connection));// reject on timeout
    }, MAX_WAITING_TIME);

    return wrappedFetch.promise// getting clear promise from wrapped
        .then(function (response) {
            clearTimeout(timeoutId);
            return response;
        })
        .then(processStatus)
        .then(parseJson);
};



module.exports = postJSON;
实现NetInfo.isConnected.fetch()的最基本方法是什么?因此,fetched只能在有internet连接的情况下工作

编辑: 我想使用:

NetInfo.isConnected.fetch()
是的,我必须重写这段代码,而不是使用getWrappedPromise,现在我想是时候了

EDIT2:好的,我重构了这个代码片段,希望它更好。欢迎任何意见。我已测试,不确定是否仍需要此NetInfo.isConnected.fetch()。现在没有错误,没有连接,或者我遗漏了什么? 新代码:

var processStatus = function (response) {
    if (response == undefined) {
        return null
    }
    // status "0" to handle local files fetching (e.g. Cordova/Phonegap etc.)
    if (response.status === 200 || response.status === 0 || response.status === 201 || response.status === 422 || response.status === 302 ) {
        return Promise.resolve(response)
    } else if(response.status === 413) {
         return Promise.reject(alert(____mobile.connection_error.large_file))
    } else {
        //return Promise.reject(alert("Process status: "+JSON.stringify(response )))
        console.log("Process status: "+JSON.stringify(response ));
        return Promise.reject(alert(____mobile.connection_error.top));
    }
};

var parseJson = function (response) {
    if (response == undefined) {
        return null
    }
    return response.json();
};

var postJSON = function (params) {
    var headers1 = {}
    if (params.json){
        headers1 = {
            'Accept': 'application/json',
            'Content-Type': 'application/json'}
    } 

    if (params.headersIn){
        headers1 = params.headersIn
    }

   var methodTmp = 'POST'

    if (params.methodIn) {
        methodTmp = params.methodIn
    }
    console.log(methodTmp)

    var fetchPromise = fetch(params.cacheBusting ? params.url + '?' + new Date().getTime() : params.url,
        {
            method: methodTmp,//'POST',// optional, "GET" is default value
            headers: headers1,

            body: params.send_data
        })// calling original fetch() method
        .then(function (response) {
            return response;
        }, function (error) {
            console.log("Fetch status: " + error);
            return fetch
        }).then(processStatus)
        .then(parseJson);


    // timeoutId = setTimeout(function () {
    //     wrappedFetch.reject(alert(____mobile.connection_error.timeout, ____mobile.connection_error.check_connection));// reject on timeout
    // }, MAX_WAITING_TIME);

    return fetchPromise
};

getWrappedPromise
-哎哟!由于某种原因,不推荐使用延迟模式。为什么不正确地使用
Promise
构造函数呢?
getWrappedFetch
在很多级别上都是错误的。它的目的是什么?直接使用
fetch
。“如何将这个异步函数连接到我的代码?”-你说的是哪个函数?请发布它,即使它尚未正确连接到您的代码。编辑了我的问题并发布了我要添加的功能。现在是重写它并摆脱wrappedPromise的好时机。我想
是什么意思。获取
返回,你想对结果做什么?
getWrappedPromise
-哎哟!由于某种原因,不推荐使用延迟模式。为什么不正确地使用
Promise
构造函数呢?
getWrappedFetch
在很多级别上都是错误的。它的目的是什么?直接使用
fetch
。“如何将这个异步函数连接到我的代码?”-你说的是哪个函数?请发布它,即使它尚未正确连接到您的代码。编辑了我的问题并发布了我要添加的功能。现在正是重写它并摆脱wrappedPromise的好时机我想
是什么意思。fetch
return,你想对结果做什么?