NODEJS V14.3.0 Выпуск Поддержка Верх Топ ждут и reps Улучшения

Node.js
NODEJS V14.3.0 Выпуск Поддержка Верх Топ ждут и reps Улучшения

На этой неделе был выпущен 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