您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

异步nodejs模块导出

异步nodejs模块导出

您的导出无法工作,因为foo声明在内部时,它在函数外部。但是,如果将导出文件放在其中,则在使用模块时,不能确保已定义导出文件

使用异步系统的最佳方法是使用回调。您需要导出回调分配方法获取回调,并在异步执行时调用它。

例:

var foo, callback;
async.function(function(response) {
    foo = "foobar";

    if( typeof callback == 'function' ){
        callback(foo);
    }
});

module.exports = function(cb){
    if(typeof foo != 'undefined'){
        cb(foo); // If foo is already define, I don't wait.
    } else {
        callback = cb;
    }
}

async.function只是一个象征异步调用的占位符。

在主要

var fooMod = require('./foo.js');
fooMod(function(foo){
    //Here code using foo;
});

如果您的模块需要多次调用,则需要管理一个回调数组:

var foo, callbackList = [];
async.function(function(response) {
    foo = "foobar";

    // You can use all other form of array walk.
    for(var i = 0; i < callbackList.length; i++){
        callbackList[i](foo)
    }
});

module.exports = function(cb){
    if(typeof foo != 'undefined'){
        cb(foo); // If foo is already define, I don't wait.
    } else {
        callback.push(cb);
    }
}

async.function只是一个象征异步调用的占位符。

在主要

var fooMod = require('./foo.js');
fooMod(function(foo){
    //Here code using foo;
});

您也可以使用Promise解决此问题。此方法通过Promise的设计支持多次调用

var foo, callback;
module.exports = new Promise(function(resolve, reject){
    async.function(function(response) {
        foo = "foobar"

        resolve(foo);
    });
});

async.function只是一个象征异步调用的占位符。

在主要

var fooMod = require('./foo.js').then(function(foo){
    //Here code using foo;
});

请参阅Promise文档

Node 2022/1/1 18:13:48 有554人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶