如何正确地将Function.apply.bind应用于Promise的解析处理程序then()?

时间:2015-11-02 22:11:44

标签: javascript promise

编辑:这种做法纯粹是出于好奇。我不打算在其他地方使用,也不是一个有效的解决方案。试着理解这个特定案例是如何运作的。

从这篇文章: https://github.com/getify/You-Dont-Know-JS/blob/master/async%20%26%20performance/ch3.md这假设起作用:

function spread(fn) {
    return Function.apply.bind( fn, null );
}

Promise.all(
    foo( 10, 20 )
)
.then(
    spread( function(x,y){
        console.log( x, y );    // 200 599
    } )
)

foo()是一个返回两个Promises数组的函数。 这是我的例子,它不起作用

var p1 = new Promise(function(resolve, reject) {
    resolve(55);
});
var p2 = new Promise(function(resolve, reject) {
    resolve(44);
});

Promise.all([p1, p2])
    .then(Function.apply.bind(
        function(x, y) {
            alert(x + ", " + y); // expecting popup with "55, 44"
        }, 
        null)
    );
);

有人可以解释我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

你没有调用bind(),你出于某种原因省略了它。

function(x, y) {
    alert(x + ", " + y); // expecting popup with "55, 44"
}

这可以通过提供apply函数作为回调来实现,并将以下函数绑定为thisArg。apply的第二个参数将为null。将调用thisArg,基本上这意味着,提供的函数将通过apply调用,不带参数。但随后“then”函数调用函数,用它自己的参数,最后一部分是推测性的。

{% for spot in spots %}
   ...
{% endfor %}