2017-09-08 2 views
1

Ich spiele mit Immutable.js Code und bemerkte etwas funky. Überspringt Immutable.js Code, der in Variablen speichert, die nicht verwendet werden?Überspringt ImmutableJS ungenutzten Codeblock?

const Immutable = require('immutable') 

function transformErrors(errors) { 
    let key = errors.keySeq() 
    let mapped = key.map((v, keystr) => { 
     console.log(v, keystr) 
     return keystr 
    }) 
    // If I enable the console log below, console log above works 
    // console.log('mapped', mapped) 
}; 
const result = transformErrors(Immutable.fromJS([1, 2])); 

Für den obigen Code, wenn

console.log('mapped', mapped)

deaktiviert ist, wird der Mapping-Code nicht aufgerufen. ich durch die Dokumentation sah jedoch keine Hinweise darauf

Antwort

1

finden Sie die Zeile: let key = errors.keySeq() kehrt ein Seq Objekt, das in immutable.js faul ist.

Die Dokumentation enthält folgende Details (https://facebook.github.io/immutable-js/docs/#/Seq):

Seq ist faul - Seq tut so wenig Arbeit wie erforderlich einen Methodenaufruf zu reagieren. Werte werden häufig während der Iteration erstellt, einschließlich der impliziten Iteration beim Reduzieren oder Konvertieren in eine konkrete Datenstruktur, z. B. eine Liste oder ein JavaScript-Array. Zum Beispiel können die folgenden führt keine Arbeit, da die resultierende Seq Werte werden nie wiederholt:

const { Seq } = require('immutable') 
const oddSquares = Seq([ 1, 2, 3, 4, 5, 6, 7, 8 ]) 
    .filter(x => x % 2 !== 0) 
    .map(x => x * x) 

So in Ihrem Beispiel immutable.js wird nicht tatsächlich Ihre Kartenfunktion zu bewerten, bis mapped verwendet wird irgendwo.