我正在尝试使用url从github获取用户数据,我是处理API的新手。我尝试遵循github-api,但是那里的代码对我来说意义不大。我了解了promise的概念,因此我尝试将此stackoverflow answer与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 answer(与上面相同),则控制台中的结果是正确的。
答案 0 :(得分:2)
您没有做任何事情来等待请求返回!
当请求以onreadystatechange
完成时,XMLHttpRequest将通知您
下面是一个实现您的目标的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函数,但是例如,检查错误状态代码并调用{{1} }。