【问题标题】:Async http-request, node.js modules and variables异步 http-request、node.js 模块和变量
【发布时间】:2017-12-22 03:39:35
【问题描述】:

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

【问题讨论】:

  • 我遇到过,不是modules.export的问题,而是请求延迟返回的问题。如何解决?
  • http-request 方法在哪里?顺便说一句,您必须使用回调来记录来自 REST API 请求的传入结果。
  • sendRequest( url, function( data, err ) ... 我只是为了可读性而命名它在这里不同。它基本上是用 node-fetch (fetch() ...) 完成的。

标签: javascript node.js node-modules


【解决方案1】:

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?

【讨论】:

    【解决方案2】:

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

    异步函数和等待返回一个承诺。此承诺在解析后分配给一个变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 2012-12-04
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2017-10-24
      相关资源
      最近更新 更多