javascript - 从函数 javascript 返回数组

标签 javascript jquery arrays return

我需要返回我的行为,但它不起作用

function getBehaviorList() {
    var behaviors = getBehaviors();
    console.log("Making behavior list");
    console.log(behaviors);
    $.each(behaviors, function (index, value) {
        if (value.indexOf("User/.lastUploadedChoregrapheBehavior") < 0) {
            $('#installedBehaviors tr:last').after('<tr><td>' + value.split('/').pop() + '</td><td><a href="#" class="btn btn-default" id="' + value + '"><span class="text-color-green glyphicon glyphicon-play-circle"></span> Start</a></td></tr>');
        }
    });
    $("#installedBehaviors a").click(function () {
        startBehavior(this);
    });
}
function getBehaviors() {
    console.log("Getting behaviors");
    session.service("ALBehaviorManager").done(function (behaviorManager) {
        behaviorManager.getUserBehaviorNames().done(function (behaviors) {
            behaviors;
            console.log(behaviors);
            return behaviors;
        });
    }).fail(function (error) {
        console.log("An error occurred: ", error);
    });
}

这是我在控制台中收到的错误

Getting behaviors

Making behavior list

undefined

Uncaught TypeError: Cannot read property 'length' of undefined

["User/.lastUploadedChoregrapheBehavior/test","User/actura-test/test", "User/check-update", "User/follow-me"]

有人知道为什么吗?

最佳答案

您无法从函数内的回调中间返回值。这很可能是一个异步调用(或出现两个)。

您可以使用 deferreds 或 Promise 来执行此操作。这是一个使用回调的简单示例:

function getBehaviorList() {
    getBehaviors(function (behaviors) {
        console.log("Making behavior list");
        console.log(behaviors);
        $.each(behaviors, function (index, value) {
            if (value.indexOf("User/.lastUploadedChoregrapheBehavior") < 0) {
                $('#installedBehaviors tr: last ').after(' < tr > < td > ' + value.split(' / ').pop() + ' < /td><td><a href="#" class="btn btn-default" id="' + value + '"><span class="text-color-green glyphicon glyphicon-play-circle"></span > Start < /a></td > < /tr>');
            }
        });
        $("#installedBehaviors a").click(function () {
            startBehavior(this);
        });
    });
}

function getBehaviors(callback) {
    console.log("Getting behaviors");
    session.service("ALBehaviorManager").done(function (behaviorManager) {
        behaviorManager.getUserBehaviorNames().done(function (behaviors) {
            console.log(behaviors);
            callback(behaviors);
        });
    }).fail(function (error) {
        console.log("An error occurred: ", error);
        callback();  // Possibly callback with [] instead.
    });
}

使用延迟可能是更好的模式,但需要更多工作,而且我需要更多地了解您正在调用的服务。

关于javascript - 从函数 javascript 返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26036655/

相关文章:

javascript - 弹出窗口在关闭时将数据返回给父级

jquery - 如何将数据传递到 jquery .on() 函数

javascript - 在数组 JS 中多次使用 trim

javascript - 如何通过特定键过滤javascript中的对象

javascript - 无法处理子组件中传递的数组

javascript - Jquery 自定义排序问题

javascript - jquery:如何选择属性名称中包含数组值的复选框?

java - 使用字符串数组中的 ID 创建一个 TextView - Android

javascript - 如何在对象数组中查找值

javascript - 有路况的行车路线