На этой неделе был выпущен Nodejs v14.3.0. Этот выпуск включает в себя добавление Await верхнего уровня, улучшения REPL и многое другое.
Улучшения REPL
Улучшение поддержки предварительного просмотра для REPL с помощью автозавершения. Например, на следующем рисунке при вводе process.ver нет необходимости вводить остальную часть фактического содержимого. Это помогает нам создать предварительный просмотр ввода для автозаполнения. .
Топ Ожидайте поддержки
Нет больше поддержки "async await, async await..." для использования ключевого слова await вне асинхронных функций.
Приложение
Делал тест в среде REPL и вроде не получилось, вылезли какие-то ошибки, почему?
Согласно спецификации, поддержка доступна только в модулях ES Modules, см.tc39/proposal-top-level-awai
Мы не можем предоставить флаг типа "--input-type=module" для среды REPL, на этот раз добавьте флаг после node--experimental-repl-awaitВзгляните на следующий пример, теперь он работает нормально.
Применение в рамках модулей ES
Nodejs в версииv13.2.0Убран флаг --experimental-module для прямого использования модулей ES.
Один из способов использованияИспользуйте расширение файла .mjs, другой способ использовать это такжеИспользуйте исходный файл .js, но установите type=module в package.json., подробности можно посмотреть на официальном сайтеузел будет .org/API/ESM.htm…
1. Создайте index.mjs
В следующем примере мы используем setTimeout для имитации функции сна и печати вывода после указанного времени задержки.
const sleep = (millisecond, value) => {
return new Promise(resolve => setTimeout(() => resolve(value), millisecond));
};
const val1 = await sleep(1000, 'Output hello after 1 second.');
console.log(val1);
const val2 = await sleep(2000, 'Output Nodejs after 1 second.');
console.log(val2);
2. Запустите index.mjs
Если вы сделаете это напрямую, вы все равно получите сообщение об ошибке, но, глядя на недавно выпущенные инструкции v14.3.0, вы не увидите, какие флаги нужно указать, что сбивает с толку.
Support for Top-Level Await
It's now possible to use the await keyword outside of async functions.
$ node index.mjs
file:///index.mjs:5
const val1 = await sleep(1000, 'Output hello after 1 second.');
^^^^^
SyntaxError: Unexpected reserved word
в проблемах GithubTop-level await throws SyntaxErrorОбнаружение подобной проблемы, объяснило причину, в настоящее время работает версия v14.3.0, нам все еще нужно добавить следующие два флага:
--experimental_top_level_await or --harmony_top_level_await
3. Запустите index.mjs еще раз
Результат этого пробега - то, что мы ожидали.
$ node --experimental_top_level_await index.mjs
Output hello after 1 second.
Output Nodejs after 1 second.
Использование ожидания верхнего уровня
Выше описано, как использовать ожидание верхнего уровня.Вот его использование.Я лично думаю, что более полезным является то, что мы можем инициализировать некоторые ресурсы в начале файла.
Создайте файл initialize-mongo-instance.mjs
Следующее определяет метод initializeMongoInstance() для инициализации экземпляра MongoDB.
// initialize-mongo-instance.mjs
import mongodb from 'mongodb';
const dbConnectionUrl = 'mongodb+srv://<user>:<password>@cluster0-on1ek.mongodb.net/test?retryWrites=true&w=majority';
const { MongoClient } = mongodb;
export default function initializeMongoInstance (dbName, dbCollectionName) {
return MongoClient.connect(dbConnectionUrl, { useUnifiedTopology: true })
.then(dbInstance => {
const dbObject = dbInstance.db(dbName);
const dbCollection = dbObject.collection(dbCollectionName);
console.log("[MongoDB connection] SUCCESS");
return dbCollection;
}).catch(err => {
console.log(`[MongoDB connection] ERROR: ${err}`);
throw err;
});
}
index.mjs
Например, index.mjs для моих файлов запуска, при инициализации запуска методом initializeMongoInstance, как определено выше, если он написан только в асинхронных асинхронных функциях, объявленных ранее, теперь имеет поддержку ожидания верхнего уровня, непосредственно следующим образом:
import initializeMongoInstance from './initialize-mongo-instance.mjs';
const testCollection = await initializeMongoInstance('dbName', 'test');
Reference
об авторе: июнь май, разработчик Nodejs, сертифицированный автор МООК, молодежь после 90-х, которая любит технологии и любит делиться, добро пожаловать, чтобы обратить внимание на проекты с открытым исходным кодом Github.www.nodejs.red