[Javascript] Wie funktioniert function.apply.bind im folgenden Code?



Answers

Spread übernimmt eine Funktion und bindet die apply Methode an das partielle Anwenden des null Arguments. Kurz gesagt,

spread(fn)

wird umgewandelt in

args => fn.apply(null, args)

Das ist das Gleiche wie die Verwendung der ES6-Spreitsyntax

args => fn(...args)

woher die Funktion ihren Namen hat.

Wenn Sie die lange Antwort wollen, denken Sie daran, was bind tut:

method.bind(context, ...args1)

gibt eine Funktion zurück, die wie funktioniert

(...args2) => method.call(context, ...args1, ...args2)

In unserem Fall ist method apply , der context ist fn und die ersten Argumente sind null , also der Aufruf

Function.apply.bind( fn, null )

erstellt eine Funktion, die wie funktioniert

(...args2) => (Function.apply).call(fn, null, ...args2)

fn.apply(…) entspricht dem fn.apply(…) oben, da apply die Methode ist, die in beiden Zugriffen von Function.prototype geerbt wurde.

Question

So bekomme ich, dass ein Array von [200,599] von der Verheißung zurückgegeben wird und die Callback-Funktion innerhalb Spread in Function.apply.bind übergeben wird, aber jetzt bin ich verloren. Wie ist das Array von [200,599] in x und y aufgeteilt? Wie funktioniert die apply.bind?

function getY(x) {
        return new Promise( function(resolve,reject){
            setTimeout( function(){
                resolve( (3 * x) - 1 );
            }, 100 );
        } );
    }

function foo(bar,baz) {
    var x = bar * baz;

    // return both promises
    return [
        Promise.resolve( x ),
        getY( x )
    ];
}

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
    } )
)



Links