gpt4 book ai didi

javascript - 从具有异步功能的 Node.js 模块返回值

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:36 24 4
gpt4 key购买 nike

我为我的 Node.js 项目编写了一个模块,该模块处理一些数据并返回结果,如下所示:

var result = require('analyze').analyzeIt(data);

问题是 analyze.js 依赖于一个异步函数。基本上它看起来像这样:

var analyzeIt = function(data) {
someEvent.once('fired', function() {
// lots of code ...
});
return result;
};
exports.analyzeIt = analyzeIt;

当然这样不行,因为result返回的时候还是空的。但是我该如何解决呢?

最佳答案

您解决它的方式与 Node 在其 API 中解决它的方式相同:使用回调,它可以是简单的回调、事件回调或与某种 promise 库关联的回调。前两个更像 Node,promise 的东西非常 au currant。

这里是简单的回调方式:

var analyzeIt = function(data, callback) {
someEvent.once('fired', function() {
// lots of code ...

// Done, send result (or of course send an error instead)
callback(null, result); // By Node API convention (I believe),
// the first arg is an error if any,
// the second data if no error
});
};
exports.analyzeIt = analyzeIt;

用法:

require('analyze').analyzeIt(data, function(err, result) {
// ...use err and/or result here
});

但是作为Kirill points out ,您可能希望 analyzeIt 返回 EventEmitter然后发出一个 data 事件(或者你喜欢的任何事件,真的),或者在错误时发出 error:

var analyzeIt = function(data) {
var emitter = new EventEmitter();

// I assume something asynchronous happens here, so
someEvent.once('fired', function() {
// lots of code ...

// Emit the data event (or error, of course)
emitter.emit('data', result);
});

return emitter;
};

用法:

require('analyze').analyzeIt(data)
.on('error', function(err) {
// ...use err here...
})
.on('data', function(result) {
// ...use result here...
});

或者,同样,某种 promises 库。

关于javascript - 从具有异步功能的 Node.js 模块返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28324651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com