簡體   English   中英

如何從已解決的Promise JavaScript中提取數據?

[英]How to extract data from a resolved promise javascript?

我正在嘗試從NewsAPI中提取數據-我得到的API的結果是已解決的承諾,但我不知道如何訪問其中的對象。

 ///////////////////SAMPLE CODE let raps; var url = 'https://newsapi.org/v2/top-headlines?' + 'category=sports&' + 'q=raptors&' + 'apiKey=xxxxxxxxxxxxxxxxxxxxxxxxxx'; var req = new Request(url); fetch(req) .then(function(response) { raps = response.json(); return raps; }); function data () { if(raps == undefined) { console.log("Data is being parsed") } else { console.log(raps); clearInterval(loadData); generateData(raps); } } const loadData = setInterval(data, 1000); function generateData(raps) { let newData = raps.articles; console.log(newData); } /////////////////END OF SAMPLE CODE What I'm getting back is: Promise {<resolved>: {…}} __proto__: Promise [[PromiseStatus]]: "resolved" [[PromiseValue]]: Object articles: (20) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}] status: "ok" totalResults: 26 

我正在嘗試訪問articles數組。

這應該工作...

let raps;

var url = 'https://newsapi.org/v2/top-headlines?' +
      'category=sports&' +
      'q=raptors&' +
      'apiKey=xxxxxxxxxxxxxxxxxxxxxxxxxx';
var req = new Request(url);
fetch(req)
 .then(response => response.json())
 .then((data) => {
   raps = data;
 });


function data () {
   if(raps == undefined) {
      console.log("Data is being parsed")
   } else {
      console.log(raps);
      clearInterval(loadData);
      generateData(raps);
   }
}

const loadData = setInterval(data, 1000);

function generateData(raps) {
  let newData = raps.articles;
  console.log(newData);
}

以下工作一次檢索文章 您的需求似乎每秒都在輪詢服務器,但可以輕松進行調整。 我使用了更新的async/await方法,將異步查詢視為同步查詢,使我更容易閱讀和理解,但如果仍然需要,您仍然可以使用fetch/then/catch ,太難重構了。

進一步解釋我的代碼。

  1. 我將整個事情作為一個異步函數運行,立即被調用,請注意代碼被包裝在(async () => { ...})(); 塊。
  2. await基本上意味着等待resolved 因此,您可以看到我等待提取解決,然后等待響應json解決(這實際上是您的解決方案中缺少的一點)
fetch('https://api.com/values/1')
    .then(response => response.json())
    .then(json => console.log(json));

 ///////////////////SAMPLE CODE (async () => { const url = 'https://newsapi.org/v2/top-headlines?' + 'category=sports&' + 'q=raptors&' + 'apiKey=xxxxxxxxxxxxxxxxxxxxxx'; const response = await fetch(url); let articles = null; if (response.ok) { const raps = await response.json(); articles = raps.articles; } if (articles) { articles.forEach(article => console.log(article)); } else { console.log('No articles'); } })(); /////////////////END OF SAMPLE CODE 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM