Switch case无法评估嵌套回调中的对象属性

时间:2017-01-11 10:10:35

标签: javascript callback

此函数接收对象参数,如{'status':'info'},但我无法在某些回调中访问它。它不应该像所有代码块的全局变量一样吗?:

var msg = {
    status: 'good',
    data: 'cats'
};

function status(msg) {
    console.log(msg.status);
    doSomething(msg.data, function(err, reply) {
        doSomething2(reply, function(err, data) {
            switch(msg.status) { // error: cannot get status of undefined
                case 'info':
                    console.log('Cat info.');
            }
        });
    });
}

function doSomething(data, cb) {
    return 'burdz';
}

function doSomething2(data, cb) {
    return data + ' and dogs';
}

status();

在切换案例中访问消息的对象属性时出错。我可以在doSomething函数之前访问该属性,但不能访问最后一个属性。

1 个答案:

答案 0 :(得分:0)



const msg = {
    status: 'good',
    data: 'cats'
};

function status(msg) {
    console.log(msg.status);
    doSomething(msg.data, function(err, reply) {
        doSomething2(reply, function(err, data) {
            switch(msg.status) {
                case 'info':
                    console.log('Cat info.');
            }
        });
    });
}

function doSomething(data, cb) {
    return 'burdz';
}

function doSomething2(data, cb) {
    return data + ' and dogs';
}

status(msg);




您需要将某些内容传递给状态!如果您的msg在全局状态

中声明,请使用const而不是let

关于范围和关闭的有趣讲座。 https://github.com/getify/You-Dont-Know-JS/tree/master/scope%20%26%20closures