Как правильно заблокировать bluebird обещание.map - PullRequest
0 голосов
/ 08 ноября 2019

Я пишу программу, которая выполняет много вычислительных операций, поэтому я хочу, чтобы они запускались одновременно, n одновременно. Я пытаюсь понять, что я делаю неправильно в отношении выполнения своих обещаний. Программа не останавливается на моем ожидании и проходит через все еще выполнение некоторых вычислений. Я написал этот пример программы, основанный на тех же принципах:

import * as fs from 'fs';
import * as path from 'path';
import * as bluebird from 'bluebird';

async function main(): Promise<void> {
  const numberOfFiles = 250;
  const Test_Directory = 'testDirectory';
  fs.mkdirSync(Test_Directory);

  const testArray: string[] = [];
  for (let i = 0; i < numberOfFiles; i++) {
    testArray.push(i.toString());
  }

  const result = await bluebird.map(testArray, item => {
    return new Promise( resolve => {
      fs.writeFile(path.join(Test_Directory, `file${item}.txt`), item, () => {});
      console.log(`file${item}.txt`);
      resolve();
    });
  }, {concurrency: 10});
  console.log('done');
 //....
 // do some stuff predicated on the above

Я ожидаю, что ожидание заблокирует мой код до тех пор, пока не будут завершены операции в promise.map. В настоящее время кажется, что это происходит, как только запускается «пакет» параллельных операций. Заранее спасибо за помощь.

...