#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'