异步nodejs模块导出

异步nodejs模块导出,第1张

异步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 pre 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 pre 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 pre using foo;});

请参阅Promise文档



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5126939.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-17
下一篇2022-11-17

发表评论

登录后才能评论

评论列表(0条)

    保存