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

时间:2017-12-20 21:39:48

标签: javascript node.js node-modules

我目前正在努力将一个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文件中。但随着我的项目随着时间的推移而变得越来越大,模块化方法就是我的解决方案。关于如何解决这个问题的任何建议?

2 个答案:

答案 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。解决后,此承诺将分配给变量。