[英]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();
});
}
然后, resolve
將responseText
成員發送到正在等待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.