有可能自己做事件/回调吗? JavaScript的

时间:2017-02-06 10:10:19

标签: javascript titanium

我想在两次http调用完成后调用一个函数。

所以我需要等到两个http呼叫结束。

这段代码是钛,但结构对于类似javascript的langs来说很常见。

我现在制作了一些代码,但是我不知道如何处理原始回调....

var flg1 = false;
var flg2 = false;

function(callback if (flg1 && flg2)){console.log"Now two flg is changedd!!!";}


// first http call
var pram={};
var url = "http://myapiserver.com/api/test";
var client = Ti.Network.createHTTPClient({
    onload : function(e) {
        Ti.API.info("first call is success!!");   
       flg1 = true; //change flg to true
       });
    },
    timeout : 3000
});

client.open("GET", url);
client.setRequestHeader('Content-type','charset=utf-8');
client.send(pram);


// second http call
var pram2={};
var url2 = "http://myapiserver.com/api/test2";
var client2 = Ti.Network.createHTTPClient({
    onload : function(e) {
        Ti.API.info("second call is success!!");   
          flg2 = true; //change flg to true
       });
    },
    timeout : 3000
});

client2.open("GET", url);
client2.setRequestHeader('Content-type','charset=utf-8');
client2.send(pram2);

1 个答案:

答案 0 :(得分:1)

我不熟悉Titanium,但我认为它支持promises,你应该尝试使用Promise.all()方法在两个调用结束时执行某些操作。

无论哪种方式,你都可以自己将所有内容包装在承诺中:

var p1 = new Promise(function (resolve, reject) {
    var pram={};
    var url = "http://myapiserver.com/api/test";
    var client = Ti.Network.createHTTPClient({
        onload : function(e) {
            // extract data from e,
            data = e
            resolve(data)
        },
        onerror: function (error) {
            reject(error)
        },
        timeout : 3000
    });

    client.open("GET", url);
    client.setRequestHeader('Content-type','charset=utf-8');
    client.send(pram);
})


// second http call
var p2 = new Promise(function (resolve, reject) {
    var pram2={};
    var url2 = "http://myapiserver.com/api/test2";
    var client2 = Ti.Network.createHTTPClient({
        onload : function(e) {
            // extract data from e,
            data = e
            resolve(data)
        },
        onerror: function (error) {
            reject(error)
        },
        timeout : 3000
    });

    client2.open("GET", url);
    client2.setRequestHeader('Content-type','charset=utf-8');
    client2.send(pram2);
}

Promise.all([p1, p2]).then(function (dataComingFromP1, dataComingFromP2) {
     // magik
})

如果你需要填充Promise,因为默认情况下Titanium不支持它(再次,我不是Titanium用户),你可以使用npm上的很多库。