【发布时间】:2019-12-23 19:32:06
【问题描述】:
我正在尝试使用 node js (v6.14.3) 为我的项目创建函数文件。
从测试文件中,我使用“require”来调用我的 helper.js 文件(函数文件),并访问我创建的 gethttp 函数。 首先我尝试使用 async/await,然后意识到它在旧版本中使用。
我看到我需要使用承诺/回调,但不明白如何。
helper.js:
const http = require('http');
module.exports.gethttp = function(url){
http.get(url, (resp) =>{
let data = '';
resp.on('data', (chunk) =>{
data += chunk;
});
resp.on('end', (data) =>{
return data;
});
}).on('error', (err) =>{
console.log(err);
});
}
test.js:
var helper = require('./helper');
var req = helper.gethttp("the url");
console.log(req);
并获得未定义的输出...
【问题讨论】:
-
为什么在
gethttp中你会在回调中返回你的值?回调是另一个范围。您不能在函数的输出中返回异步操作在函数内部返回的结果。你最好回报一个承诺。 -
要从异步操作返回数据,请参阅How do I return data from an asynchronous call。可能您想使用
request-promise模块,因为它已经为您收集了 http 响应并返回了一个承诺,该承诺允许您从函数中返回它,而调用者用户承诺获取数据。你不能从你的函数中返回数据。您的函数在数据完成到达之前很久就返回了。
标签: node.js