Javascript:检查函数是否为TRUE

Javascript:检查函数是否为TRUE,javascript,titanium,Javascript,Titanium,我有一个函数,当cyklus的内部条件满足时,它应该返回TRUE。(我测试了这个条件,它可以工作) 如何修复我的函数,使其仅在满足条件时变为真 谢谢。请尝试以下方法来检查条件是否应始终正确 while(true){ alert('something'); } 这句话 if (ch) { 始终为true,因为ch是一个函数,而ToBoolean(函数)==true 但是,即使将其更改为if(ch()){..},它也不会工作,因为在函数内部执行异步操作。函数只返回而不等待它完成。在这种情

我有一个函数,当cyklus的内部条件满足时,它应该返回TRUE。(我测试了这个条件,它可以工作)

如何修复我的函数,使其仅在满足条件时变为真


谢谢。

请尝试以下方法来检查条件是否应始终正确

while(true){
    alert('something');
}
这句话

if (ch) {
始终为true,因为
ch
是一个函数,而
ToBoolean(函数)==true

但是,即使将其更改为
if(ch()){..}
,它也不会工作,因为在函数内部执行异步操作。函数只返回而不等待它完成。在这种情况下,您应该使用回调或承诺模式。最简单的是回调

var ch = function check(callback) {

    // ...

    var xhr = Ti.Network.createHTTPClient({
        onload: function () {
            json = JSON.parse(this.responseText);
            var status = false;
            for (i = 0; i < json.poc.length; i++) {
                prnt = json.poc[i];
                if (win.xtra_id == prnt.id_cv && picker.getSelectedRow(0).title == prnt.datum && prnt.capacity <= prnt.cnt) {
                    status = true;
                }
            };
            callback(status);
        }
    });

    // ...
};

ch(function(status) {
    if (status) {
        alert('Something')
    }
});
var ch=函数检查(回调){
// ...
var xhr=Ti.Network.createHTTPClient({
onload:function(){
json=json.parse(this.responseText);
var状态=假;
对于(i=0;i如果(win.xtra_id==prnt.id\u cv&&picker.getSelectedRow(0.title==prnt.datum&&prnt.capacity您的函数,
ch
没有返回值!它启动
Ti.Network.createHTTPClient
函数,您可以在其中定义匿名回调函数(
onload:function(){…
)。该匿名函数在ch返回后执行。您需要在回调后检查您的条件:

...
                         if (win.xtra_id == prnt.id_cv && picker.getSelectedRow(0).title == prnt.datum && prnt.capacity <= prnt.cnt) {
                             alert('something') //DO YOUR STUFF HERE!
                             return true;
                         }
...
。。。

如果(win.xtra_id==prnt.id\u cv&&picker.getSelectedRow(0).title==prnt.datum&&prnt.capacity首先设置值为false的变量,然后在达到条件时更新为true。从函数返回该变量函数不会等待内部ajax调用结束,但会立即返回,这就是为什么条件始终为true。
var ch = function check(callback) {

    // ...

    var xhr = Ti.Network.createHTTPClient({
        onload: function () {
            json = JSON.parse(this.responseText);
            var status = false;
            for (i = 0; i < json.poc.length; i++) {
                prnt = json.poc[i];
                if (win.xtra_id == prnt.id_cv && picker.getSelectedRow(0).title == prnt.datum && prnt.capacity <= prnt.cnt) {
                    status = true;
                }
            };
            callback(status);
        }
    });

    // ...
};

ch(function(status) {
    if (status) {
        alert('Something')
    }
});
...
                         if (win.xtra_id == prnt.id_cv && picker.getSelectedRow(0).title == prnt.datum && prnt.capacity <= prnt.cnt) {
                             alert('something') //DO YOUR STUFF HERE!
                             return true;
                         }
...
var MYFLAG=-1

...
                         if (win.xtra_id == prnt.id_cv && picker.getSelectedRow(0).title == prnt.datum && prnt.capacity <= prnt.cnt) {
                             MYFLAG=1
                             return true;
                         }
                         else
                         {
                             MYFLAG=0
                         }
...

//use a timer to check the flag every 500ms
var myInterval = setInterval(function()
    {     
    if (MYFLAG != -1) {
        if (MYFLAG==1) {
            alert('returned true :)');
        }
        else {
            alert('did not return true :(');
        }

        clearInterval(myInterval);
    }
}, 500);