function getURL(URL) {
return new Promise(function (resolve, reject) {
var req = new XMLHttpRequest();
req.open('GET', URL, true);
req.onload = function () {
if(req.status === 200) {
resolve(req.responseText);
} else {
reject(new Error(req.statusText));
}
};
req.onerror = function () {
reject(new Error(req.statusText));
};
req.send();
});
}
var request = {
comment: function getComment() {
return getURL('http://azu.github.io/promises-book/json/comment.json').then(JSON.parse);
},
people: function getPeople() {
return getURL('http://azu.github.io/promises-book/json/people.json').then(JSON.parse);
}
};
function main() {
function recordValue(results, value) {
console.log(results); //这里第一次是一个空数组,第二次是一个有第一次数据的数组
console.log(value);
results.push(value);
return results;
}
// [] 用来保存初始化的值
var pushValue = recordValue.bind(null, []);
//request.comment()这一步返回了一个数组,那么.then(pushValue)这里就可以获取到这个数组了,
//但是recordValue.bind(null, []);这里为什么要传null,而且为什么只有一个result = [],那么value的值呢?不传为什么也可以获取值?
return request.comment().then(pushValue).then(request.people).then(pushValue);
}
// 运行的例子
main().then(function (value) {
console.log(value);
}).catch(function (error) {
console.error(error);
});
request.comment()这一步返回了一个数组,那么.then(pushValue)这里就可以获取到这个数组了,但是recordValue.bind(null, []);这里为什么要传null,而且为什么只有一个result = [],那么value的值呢?不传为什么也可以获取值?
看了一些资料,已经理解了,首先bind,第一个传null得话不改变this指向,而且可以在后续的调用中去传入参数
function multiply (x, y, z) {
return x * y * z;
}
var double = multiply.bind(null, 2);
//Outputs: 24
console.log(double(3, 4));
例如这里第一次就传了x的值,那么yz的值就后续调用里面传入的。
那么回到原来那里,就是说,首先确定result的值是一个空数组,value的值,自然由request.comment()返回出来的值来传入。那么大概就是这样。可以这样试验下
比如 var pushValue = recordValue.bind(null);
这里什么都不传,那么result的值就是返回的数组对象,value就是null了;