【问题标题】:make nodejs http get call in synchronous way以同步方式使nodejs http get调用
【发布时间】:2020-05-13 13:06:27
【问题描述】:

我在一次采访中被问到一个问题。下面是问题。

const JsonFromHTTPCall = function(){

    // make get request to some api url and return json object.
}



// code below is not editable

let result = JsonFromHTTPCall();
console.log("result ", result);

我没有找到让 console.log 语句等到我从 http 调用得到结果的方法。

请给我一个解决方法。 提前致谢。

【问题讨论】:

标签: node.js http asynchronous


【解决方案1】:

Nodejs 不以任何方式提供同步网络。 所有内置网络都是异步的。因此,您不能直接从通过网络检索的函数返回值。相反,您需要通过回调函数、您触发的事件或返回的 Promise 将结果传达回。

有关此问题的摘要,请参阅此高度活跃的问题/答案:

How do I return the response from an asynchronous call?

有一个严重的黑客行为涉及使用同步子进程并让它为你建立网络,但这不太可能是他们在你的采访中要求的。

所以,这个问题的主要答案是“nodejs 不提供同步网络”以及“你不能将异步结果更改为同步结果”。 因此,正确的编码方式是使用 nodejs 异步编码技术。

我所知道的进行 http get 调用的最简洁的方法是使用诸如 request-promise() 或我最近最喜欢的 got() 之类的库,并使用 promise 接口加上 async/await 来创建一个干净整洁的代码路径:

const got = require('got');

async function getSomeJSON(url) {
    let data = await got(url).json();
    console.log(data);
    return data;
}

getSomeJSON(myURL).then(data => {
    console.log("got my data");
}).catch(err => {
    console.log(err);
});

【讨论】:

  • 我不应该更改函数调用部分。请看问题一次
  • @LokiKartik - 好吧,您不能直接从函数返回异步检索的值。除了我提到的可怕的黑客之外,不能这样做。我向您展示了最干净的方法和推荐的方法。如果您了解 nodejs 中的异步操作如何工作并知道如何使用它们进行编码,我认为他们必须进行测试?
  • @LokiKartik - 看看我在回答中添加了什么来澄清。
  • @LokiKartik - 在我写下我的答案之前,我已经仔细研究了你的问题。你不能那样做。我写了一个你可以做到的方法。
猜你喜欢
  • 2011-08-22
  • 1970-01-01
  • 2014-05-01
  • 2019-05-26
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
相关资源
最近更新 更多