簡體   English   中英

使用Promises和xmlhttpRequests從github獲取公共用戶數據?

[英]Get public user data from github using Promises and xmlhttpRequests?

我正在嘗試使用url從github獲取用戶數據,這是我處理API的新手。 我嘗試遵循github-api ,但是那里的代碼對我來說意義不大。 我了解了promise的概念,因此我嘗試將這個stackoverflow 答案與promise結合起來,並嘗試如下實現。 我正在使用節點。

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

var request = new XMLHttpRequest();

function pr() {
  return new Promise(function(resolve, reject) {
    request.open('get', 'https://api.github.com/users/$username')
    request.send();
    resolve(request.response);
  });
}

var gitpr = pr();
gitpr.then(function() {
  console.log(request.response);
})

我的request.response [[PromiseValue]]在運行節點中的代碼時未定義。

如果我遵循此stackoverflow 答案 (與上述相同),則控制台中的結果是正確的。

您沒有做任何事情來等待請求返回!

XMLHttpRequest將在請求完成時通過onreadystatechange通知您

下面是實現您的目標的pr()函數,假設“ $ username”是有意義的。

注意:我已經將請求對象放入函數中以進行更好的封裝,並且正在通過resolve將響應的值傳遞給調用方:

function pr() {
  var request = new XMLHttpRequest();
  return new Promise(function(resolve, reject) {
    request.onreadystatechange = function() {
      if (request.readyState == 4) {
        resolve(request.responseText);
      }
    }
    request.open('get', 'https://api.github.com/users/$username', true)
    request.send();
  });
}

然后, resolveresponseText成員發送到正在等待Promise的第一個函數的值的函數:

pr().then(function(val) {
  console.log(val)
}, function(err) {
  console.log(err)
}) 

在pr()函數中,我們並不是在調用reject(),所以不能調用err函數,但是,例如,檢查錯誤狀態代碼並對此調用reject是一個好主意。

暫無
暫無

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

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