等待提取完成,直到返回数据

时间:2020-08-03 18:47:00

标签: javascript node.js

每次提取完成后,我想获取返回的数据,因为在完全提取之后,正确的时间戳将在那里,但是该函数将返回带有空时间戳的链接,而不是所有数据的最新时间戳。

async function pushData(url) {
  let settings = { method: "Get" };
  let timestamp = "";
  let i = 0;

  fetch(url, settings)
      .then(res => res.json())
      .then((json) => {
        json.forEach(function (object) {
          console.log(object);
          i++;
        });
        timestamp = json[i-1].timestamp;
      });

  return await 'https://www.bitmex.com/api/v1/trade?count=1000&symbol=XBTUSD&startTime=' + timestamp;
}

var test = pushData('https://www.bitmex.com/api/v1/trade?count=1000&symbol=XBTUSD');
console.log(test);

1 个答案:

答案 0 :(得分:1)

您必须在此处通过使用Promise / async来使用JavaScript await,就像我在下面的代码中为您所做的那样:

async function pushData(url) {
  let settings = { method: "GET" };
  let timestamp = "";
  let i = 0;

  let res = await fech(url, settings)
  res = await res.json();

  res.forEach(function (object) {
    console.log(object);
    i++;
  });
  timestamp = res[i - 1].timestamp;

  return {
    res: res,
    timestamp: timestamp
  };
};

(async() => {
var test = await pushData('https://www.bitmex.com/api/v1/trade?count=1000&symbol=XBTUSD');
console.log(test);
console.log("Timestamp: " + test.timestamp)
console.log("Fetch Result: " + test.res)
})();

由于此函数为async,因此它返回一个Promise,也必须对其进行解析。您没有解决它-您从未使用await.then()来解决它。

评论中提供了一些资源:async / await Stackoverflow Post MDN Docs