我目前正在努力将一个node.js模块中的变量值转换为另一个node.js模块。这是我目前的问题:
我通过https-request从REST API获取数据:
// customrequest.js
sendRequest( url, function( data, err ) {
if(err) {
console.log('--- Error ---');
console.log( err );
}
else {
console.log('--- Response ---');
console.log(data);
// output: data
return data;
}
module.exports = { sendRequest }
我的index.js文件:
// index.js
let sendRequest = require('./customrequest');
let req;
req = sendRequest('google.com');
console.log(req);
// output: undefined
// how can I get the variable set, when request is getting data in response?
我完全理解,对API的请求需要一些时间来响应。一个解决方案是,我只是将所有内容放入一个js文件中。但随着我的项目随着时间的推移而变得越来越大,模块化方法就是我的解决方案。关于如何解决这个问题的任何建议?
答案 0 :(得分:0)
Node针对这种情况使用回调。尝试这样的事情:
// customrequest.js
sendRequest(url, callback)
module.exports = { sendRequest }
// index.js
let sendRequest = require('./customrequest');
let req = sendRequest('google.com', function (data, err) {
if (err) {
//handle error here
}
console.log(data);
};
// output: undefined
// how can I get the variable set, when request is getting data in response?
答案 1 :(得分:0)
感谢。我遇到的问题有些不同。我用这段代码片段解决了它...使用async和await。
// request.js
const fetch = require('node-fetch')
async function myRequest (somestring) {
try {
let res = await fetch('https://api.domain.com/?endpoint='+somestring)
if (res.ok) {
if (res.ok) return res.json()
return new Error (res.status)
}
} catch (err) {
console.error('An error occurred', err)
}
}
module.exports = { myRequest }
// index.js
const request = require('./requests')
const myRequest = request.myRequest
let myVar;
myRequest('somestring')
.then(res => myVar = res.result)
setInterval(() => {
myRequest('somestring')
.then(res => myVar = res.result)
console.log(myVar)
}, 1000)
async函数并等待返回一个promise。解决后,此承诺将分配给变量。