Скрипт NodeJS не работает с async / await

Не могу понять, почему приведенный ниже сценарий не запускается. Скорее всего, сценарий не будет делать то, что я хочу, но будет использовать

node ./contentful/contentful-assets.js

в терминале он ничего не делает - никаких ошибок, ничего не регистрируется, чтобы я даже начал отладку. Однако, если я удалю async, он попытается выполнить сценарий и вернет ошибку.

./contentful/contentful-assets.js

const contentful = require('contentful-management');
const iterator = require('make-iterator');
const assets = require('./assetObject.js');

async resolve => {
  console.info('Creating Contentful client');
  const client = contentful.createClient({
    accessToken: 'token',
    logHandler: (level, data) => console.info(`${level} | ${data}`)
  });

  const iterableAssets = iterator(assets);
  const space = await client.getSpace('space');
  const environment = await space.getEnvironment('enviroment');

  const cmsAssets = [];

  const assetProcessingTimes = [];
  const inProcess = new Map();
  let processedAssetsCounter = 0;

  const createAndPublishSingleAsset = async ({ asset, done, index }) => {
    if (done) {
      if (inProcess.size > 0) return false;
      return resolve(cmsAssets);
    }

    const start = Date.now();
    const id = '' + start + Math.round(Math.random() * 100);
    inProcess.set(id, true);
    let cmsAsset;

    try {
      cmsAsset = await environment.createAssetWithId(asset.postId, {
        fields: {
          title: {
            'en-US': asset.title
          },
          description: {
            'en-US': asset.description
          },
          file: {
            'en-US': {
              contentType: 'image/jpg',
              fileName: asset.filename,
              upload: asset.link
            }
          }
        }
      });
    } catch (e) {
      console.info(`Asset "${asset.title}" failed to create, retrying...`);
      createAndPublishSingleAsset({
        asset,
        done,
        index
      });
    }
    try {
      const processedCMSAsset = await cmsAsset.processForAllLocales();
      const publishedCMSAsset = await processedCMSAsset.publish();

      cmsAssets.push(publishedCMSAsset);
      assetProcessingTimes.push((Date.now() - start) / 1000);
      inProcess.clear(id);
      const eta = Math.floor(
        assetProcessingTimes.reduce((a, b) => a + b, 0) /
          assetProcessingTimes.length *
          (assets.length - index) /
          60
      );
      processedAssetsCounter += 1;
      console.info(
        `Processed asset ${processedAssetsCounter}/${assets.length} - eta: ${eta}m`
      );
      createAndPublishSingleAsset(iterableAssets.next());
    } catch (e) {
      console.info(`Asset "${asset.title}" failed to process, retrying...`);
      await cmsAsset.delete();
      createAndPublishSingleAsset({
        asset,
        done,
        index
      });
    }
  };
  console.info('Starting to create assets');
  createAndPublishSingleAsset(iterableAssets.next());
  createAndPublishSingleAsset(iterableAssets.next());
  createAndPublishSingleAsset(iterableAssets.next());
};

assetObject.js

[
  {
    link: 'https://example.com/example1.jpg',
    title: 'Example 1',
    description: 'Description of example 1',
    postId: '1234567890',
    filename: 'example1.jpeg'
  }, ... // Many more
]

Что я здесь пропустил?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
390
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Боюсь, что вы не вызываете функцию, не могли бы вы попробовать следующее?

const contentful = require('contentful-management');
const iterator = require('make-iterator');
const assets = require('./assetObject.js');

const doWork = async resolve => {
  console.info('Creating Contentful client');
  ...
}

doWork();

Вы просто объявляете асинхронную функцию, которая выполняет весь определенный код, но на самом деле вы ее не вызываете.

Ха-ха ... да. Большое тебе спасибо.

Darren 15.09.2018 17:54

В этом фрагменте кода вы объявляете функцию, но никогда не вызываете ее:

//declaring an async function, with "resolve" as the argument
async resolve => {
 //function definition
}

Чтобы впоследствии иметь возможность ссылаться на вызываемую функцию, вы можете назначить ее для const / let / и т. Д .:

const createAssets = async resolve => { }
//now, invoke
createAssets()

Другие вопросы по теме