Я не знаю, что значит повторяемость

#javascript #node.js

Вопрос:

Я пытаюсь выполнить упражнение с Node.js и некоторые модули, я играю в языковую игру в угадайку после курса, и я продолжаю получать эту ошибку.

 TypeError: pkg is not iterable
    at file:///C:/Users/alanz/OneDrive/Escritorio/HTMLExercises/examplescursos/Language Guesser/index.js:3:17
[90m    at ModuleJob.run (internal/modules/esm/module_job.js:170:25)[39m
[90m    at async Loader.import (internal/modules/esm/loader.js:178:24)[39m
[90m    at async Object.loadESM (internal/process/esm_loader.js:68:5)[39m
 

И это мой код:

 import { franc } from 'franc'
import pkg from 'langs';
const [langs] = pkg;
const input = process.argv[2];
const langCode = franc(input);
if (langCode === 'und') {
    console.log("What language is this???")
} else {
    const language = pkg.where("3", langCode);
    console.log(`I think it's ${language}`)
}
 

Я использую франк и язык nodejs в качестве модулей. И они уже установлены в моем пакете.json
Я не знаю, почему это не работает… Есть идеи, почему?

Ответ №1:

 const [langs] = pkg;
 

Эта строка пытается получить доступ к элементу 0 pkg с помощью деструктурирования и присвоить этот результат langs . Наиболее распространенная вещь, на которой вы использовали бы такой вид деструктурирования, — это массив, но он может работать с чем угодно, что реализует «итератор», который является просто способом сообщить javascript «вот как пройти через мои элементы».

Таким образом, ошибка говорит вам, что pkg не является массивом и не является чем-то другим, реализующим итератор. Я предполагаю, что это какой-то предмет. Если langs использует экспорт по умолчанию, вы, вероятно, захотите:

 import langs from 'langs';
 

Если он использует именованный экспорт, вы, вероятно, захотите:

 import { langs } from 'langs'