Jak korzystać z opcjonalnego łączenia w Node.js 12

17

Opcjonalne łączenie w łańcuchy ( obj?.param1?.param2) wydaje się być świetną funkcją i naprawdę chciałem zobaczyć, jak zostało zaimplementowane i wreszcie pozbyć się zagnieżdżonych ifs, dowolnych funkcji i co nie dla tak prostej operacji.

Ale jest problem, to nie działa. Zaktualizowałem do Węzła 12 i nadal pojawia się błąd:

var dude = res?.param?.params[0]
SyntaxError: Unexpected token '.'

lub

var dude = res.param?.params[0]
SyntaxError: Unexpected token '.'

Jaki jest problem?

Czy muszę zmienić konfigurację języka lub pobrać bibliotekę, aby włączyć tę funkcję? A może po prostu jeszcze tego nie ma?

almarc
źródło
2
To jest w Stage 4. Node.js jeszcze tego nie obsługuje. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Sridhar
Szukałem „propagacji nodejs null” i początkowo nie mogłem znaleźć tego pytania. Mam nadzieję, że ten komentarz poprawi możliwości wyszukiwania.
Casimir
Obawiam się, że niewiele mogę na to poradzić. Jest tam tag, ale nie jest on związany z Javascriptem i spowoduje więcej zamieszania niż czynienia dobra.
almarc

Odpowiedzi:

17

Opcjonalne łączenie łańcuchowe nie jest obecnie obsługiwane w Node.jswersji 13, a poniżej będzie obsługiwane w Node.jswersji 14 i większości przeglądarek w miarę przenoszenia Stage 4. Obecnie kilka platform obsługuje tę funkcję. Listę platform obsługujących opcjonalne tworzenie łańcuchów można znaleźć w podanym linku . Możesz włączyć opcjonalne za pomocą --harmonyflagi.

Balaj Khan
źródło
10

Spec dla opcjonalnej funkcji łańcuchowym właśnie awansował do etapu 4 (końcowy) na 22 grudnia 2019 r . Węzeł 12 pojawił się przed końcem specyfikacji - podobnie zresztą jak Węzeł 13.

Według node.green opcjonalne łączenie łańcuchów będzie obsługiwane począwszy od Węzła 14, ale nadal będzie wymagało --harmonyflagi. (Wydaje się, że jest to sprzeczne z opisem --harmonyflagi Node - funkcje wysyłki V8 nie powinny wymagać flagi - więc nie jestem pewien, co z tego zrobić.) Mimo to, czy potrzebuje flagi, czy nie, nie chciałbym spodziewamy się zobaczyć tę funkcję do czasu wydania Node 14 około kwietnia 2020 r .

Jeśli chcesz dzisiaj grać z opcjonalnym łańcuchem, najlepszym rozwiązaniem jest użycie TypeScript (który dodał opcjonalny łańcuch w wersji 3.7 ) lub preprocesora takiego jak Babel .

Joe White
źródło
10

Byłem w stanie używać nodejs v13.7.0 z flagą --harmony.

węzeł --harmony myCode.js

Dina

nieokreślony

nieokreślony

//myCode.js

const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah'
  }
};

const catName = adventurer.cat?.name;
console.log(catName);
// expected output: Dinah
const dogName = adventurer.dog?.name;
console.log(catName);
//expected output: undefined

console.log(adventurer.someNonExistentMethod?.())
//expected output: undefined
użytkownik3283069
źródło
0

Opcjonalne łączenie łańcuchowe zostanie wdrożone wraz z Node.jswersją 14, która zostanie wydana 20.04.2020. Do tej pory możesz używać Babelz @babel/plugin-proposal-optional-chaining.

Chema
źródło