Как узнать идентификатор и дождаться существующего обещания? - PullRequest
0 голосов
/ 13 января 2019

Возможно, самое простое решение - это await после добавления некоторого шаблона обещания или повторного использования ...
Я не вижу, как повторно использовать Обещание, которое, я полагаю, уже существует, в метод csv-parse.readFileSync() или метод parse(), показанный ниже.

Другое решение состоит в том, чтобы добавить больше обещаний и немного async / await : весь блок LOAD может быть функцией ... Но я также не вижу, куда поместить ожидающих.

'use strict';
const fs     = require('fs')
const path   = require('path')

// CONFIGS:
const cf_cover_dataset = '../data/cover.csv'
var COVER = null;

// LOAD external configs:
var COVER_file = path.resolve(__dirname, cf_cover_dataset);
if (path.extname(cf_cover_dataset)=='.csv') {
  const parse  = require('csv-parse') // npm i csv-parse  (not parse"r")
  let raw = []
  parse(fs.readFileSync( COVER_file ), {
    trim: true,
    skip_empty_lines: true
  })
  .on('readable', function(){
    let record
    while (record = this.read()){
      raw.push(record)  ; console.log('.')}
  })
  .on('error', function(err){ console.error(err.message) })
  .on('end', function(){

     // I NEED TO WAY THE END HERE, HOW TO?

    COVER = f(raw);
    console.log("1. cover from CSV");
  });
} else {
  COVER = JSON.parse(COVER_file)  // ... and WAY here
  console.log("1. cover from JSON");
}

console.log("2. END!!");

Результат

   2. END!!
   1. cover from JSON

Как получить step2 после step1?

Ответы [ 3 ]

0 голосов
/ 13 января 2019

Это более один обходной путь, а не реальное решение, например, с использованием await.
(отредактируйте этот ответ, это Вики, вы можете исправить мои предположения, мой английский или добавить подсказки и ссылки)


Кажется, что единственное решение - уродливое наивное решение, заключающее в себе все программное обеспечение в функции main():

if (path.extname(cf_cover_dataset)=='.csv') {
  ...
  parse(fs.readFileSync( COVER_file ), {
    ...
  })
  .on('readable', function(){
    ...
  })
  .on('error', function(err){ ... })
  .on('end', function(){
    COVER = f(raw);
    console.log("1. cover from CSV");
    main();
  });
} else {
  COVER = JSON.parse(COVER_file)  // ... and WAY here
  console.log("1. cover from JSON");
  main();
}

function main() {  // step2, ugly but run in sequence 
   console.log("2. END!!");
}

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

0 голосов
/ 14 января 2019

вы читаете файл в режиме синхронизации, но анализируете в асинхронном режиме. Чтобы использовать синтаксический анализатор в режиме синхронизации, как описано выше, необходимо csv-parse/lib/sync использовать API синтаксического анализа CSV .

См. Мой ответ на GitHub , который включает пример.

0 голосов
/ 13 января 2019

csv-parse предлагает API синхронизации в соответствии с https://csv.js.org/parse/api/#sync-api

Я полагаю, что это поможет обойтись без обещаний / обратных вызовов, которых вы хотите избежать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...