回调中的Javascript范围

时间:2013-03-04 22:50:49

标签: javascript node.js callback

我有一个在nodeJS内部带回调的方法,我正在尝试在外部函数中设置一个值,该值可以返回,并将回调中传递的数据结果返回到mongoose调用:

'use strict';

var mongoose = require('mongoose')
    ,Alert = mongoose.model('Alert');

exports.getAllAlerts = function() {
    var result = [];
    Alert.find({}, function(err, alerts) {
        if(err) {
            console.log('exception while fetching alerts');
        }
        if(alerts) {
            result = alerts;
            console.log('result: ' + result);
        }
    });
    return result;
}

如何使用在猫鼬回调中返回的警报值来设置result []的值?

提前致谢

1 个答案:

答案 0 :(得分:4)

最有可能的是,find()异步运行,在这种情况下,您将始终返回空数组,因为在您返回值时,它未定义也未分配。

您需要重写.getAllAlerts()方法,以便为自己提供回调函数,例如

exports.getAllAlerts = function( cb ) {
    Alert.find({}, function(err, alerts) {
        if(err) {
            console.log('exception while fetching alerts');
        }

        if(alerts) {
            if( typeof cb === 'function' ) {
                cb( alert || [ ] );
            }
        }
    });
}

...你会以像

这样的方式使用它
YourModule.getAllAlerts(function( alerts ) {
    console.log( alerts );
});