为什么这个jQuery函数没有返回任何东西?

时间:2012-10-23 22:08:35

标签: jquery function null return

我已经搜索了几个小时试图修复这个jQuery / JS代码,但它似乎并不想返回任何东西。

var result = getURLS(); // this is always blank

function getURLS() {
    var urls = [];
    var URL_record = Parse.Object.extend("URL_record");
    var query = new Parse.Query(URL_record);

    query.equalTo("user", Parse.User.current());
    query.ascending("date");

    query.find({
        success : function(results) {
            var tempURLS = [];
            $.each(results, function(index, record) {
                urls.push(record.get("shortURL") + " " + record.get("longURL"));
            });
        },
        error : function(error) {

        }
    });
    return urls;
}

虽然如果我从这个特定功能创建一个警报功能:

success : function(results) {
    var tempURLS = [];
    $.each(results, function(index, record) {
        urls.push(record.get("shortURL") + " " + record.get("longURL"));
    });
        alert(urls);
},

似乎很警觉。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

query.find是异步的,您需要在success函数内部设置变量,然后调用使用result的代码。

var result;
getURLS();

function getURLS() {
    var urls = [];
    var URL_record = Parse.Object.extend("URL_record");
    var query = new Parse.Query(URL_record);

    query.equalTo("user", Parse.User.current());
    query.ascending("date");

    query.find({
        success : function(results) {
            var tempURLS = [];
            $.each(results, function(index, record) {
                urls.push(record.get("shortURL") + " " + record.get("longURL"));
            });
            result = urls;
            // call code that uses result here
            processResults(result);
        },
        error : function(error) {

        }
    });
}

答案 1 :(得分:0)

我发现query.get在被困了几个小时之后是异步的。直到我从$(function(){})中删除了所有其他内容;阻止并在控制台上看到查询在块之后触发。最终的想法是将模型和视图加载到Facebook应用程序中,该应用程序还具有异步初始化函数。我没想到Parse查询也是异步的。