繁体   English   中英

异步http请求,node.js模块和变量

[英]Async http-request, node.js modules and variables

我目前正在努力将变量值从一个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文件中。 但是随着我的项目随着时间的推移会变得越来越大,因此模块化方法是我的首选解决方案。 关于如何解决这个问题有什么建议吗?

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? 

谢谢。 我遇到的问题有些不同。 我用这段代码片段解决了它……使用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) 

异步函数并等待返回承诺。 该承诺在解决后会分配给变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM