0
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的值呢?不传为什么也可以获取值?

2015-10-23 提问

1 个回答

3

已采纳

看了一些资料,已经理解了,首先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了;

推广链接