одновременно не будет ждать пока ресурс одной задачи станет доступным, поэтому на самом деле не тот ответ, который мне нужен :(

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

пример (концептуальный):

npm run task1 & waitfor task1 then task2 & waitFor task3 then task4 ...

есть идеи?

РЕДАКТИРОВАТЬ

В качестве примера: допустим, моя первая задача - запуск веб-сервера, а вторая задача - получать данные с этого веб-сервера каждый раз, когда происходит событие. Другой пример: моей первой задачей может быть запуск менеджера webdriver, моя вторая задача, запуск веб-сервера, а третья задача - запускать e2e-тесты каждый раз, когда меняются мои файлы. Итак, мне нужно, чтобы все эти задачи выполнялись одновременно, но их нужно инициализировать в определенном порядке и времени.

 André Marcondes Teixeira06 окт. 2017 г., 17:58
Я сделал мой концептуальный пример похожим на обещания. Но встроенные сценарии npm не могут выполнять обещания, насколько я знаю
 theGleep06 окт. 2017 г., 17:37
Это звучит как работа для обещаний!
 theGleep06 окт. 2017 г., 17:59
Лучше мне больше не делать стекопоток сегодня - я совершенно неправильно понял ваш вопрос и подумал, что вы спрашиваете, как это сделать в коде, а не в npm.

Ответы на вопрос(2)

Решение Вопроса

одновременно с участиемждать, на пакет для управления параллельными / последовательными сценариями и выходными данными.ждать, на последовательные запуски поддержки статуса ответа головы, прослушивание tcp, ...

Например :

"scripts": {
    "start": "concurrently -k -n \"DB,API,WEB\" -c \"blue,magenta,yellow\" \"npm run start-db\" \"npm run start-api\" \"npm run start-web\"",
    "start-db": "myDbServerCmd",
    "start-api": "wait-on tcp:27017 && myApiServerCmd",
    "start-web": "myFrontServerCmd",
}

Спасибо dchambers за идею (источник).

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

Может случиться так, что вы хотите запускать задачи последовательно (первое решение ниже), однако в своем посте вы упомянули параллельное.

1. Выполнение задач последовательно

npm-scripts поддерживает&& оператор, который обычно используется в оболочках bash.&& оператор, используемый вnpm-scripts, однако работает успешно кроссплатформенный.

Пример псевдо с использованием&& оператор для цепочки задач:

"scripts": {
    "foo": "npm run task1 && npm run task2 && npm run task3"
},

Бег$ npm run foo через ваш CLI, используя пример выше ...

Изначально работаетtask1.когдаtask1 успешно завершен(Т.е.task1 выходит со статусом ноль) тогдаtask2 будет работатькогдаtask2 тогда успешно завершеноtask3 будет работать

Если левая сторона&& оператор не работает по любой причине,(то есть он выходит с ненулевым кодом / статусом)последующие задачи с правой стороны не будут выполняться. Например; еслиtask1 терпит неудачу тогдаtask2 а такжеtask3 не побежит.

2. Запуск задач одновременно

npm-scripts также поддерживает сингл& оператор кроссплатформенный для запуска задач одновременно.

Пример псевдо с использованием& оператор:

"scripts": {
    "foo": "npm run task1 & npm run task2 & npm run task3"
},

В этом примере основное различие между двойным&& и единственный& Оператор в том, что если левая сторона единого& дает сбой, тогда правая сторона работает независимо. Например; еслиtask1 терпит неудачу тогдаtask2 все еще работает.

3. Выполнение задач параллельно.

Для параллельного выполнения задач я рекомендую использоватьparallelshell:

$ npm i -D parallelshell

Псевдо-пример с использованиемparallelshell:

"scripts": {
    "foo": "parallelshell \"npm run task1\" \"npm run task2\" \"npm run task3\""
},

Этот пример изначально кажется очень похожим на использование одного& Оператор показан в предыдущем разделе, однако он предлагает дополнительные преимущества, перечисленные вдокументация, Основное преимущество(ИМО) являются:

Если команда command1 или command2 завершит работу с ненулевым кодом выхода, это не повлияет на результат вашей оболочки (т.е. они могут потерпеть неудачу и npm / bash / что угодно проигнорирует это). Parallelshell не будет игнорировать его и завершит работу с первым ненулевым кодом выхода.

4. Выполнение задач параллельно и последовательно.

Допустим, вы хотите бежатьtask1 а такжеtask2 параллельно / одновременно, а затем запуститьtask3 только когда обаtask1 а такжеtask2 успешно завершены.

Для достижения этого вы можете использовать обаparallelshell ивстроенный && оператор.

Псевдо-пример с использованиемparallelshell и&& оператор для цепочки задач:

"scripts": {
    "foo": "parallelshell \"npm run task1\" \"npm run task2\" && npm run task3"
},

РЕДАКТИРОВАТЬ

Решение, основанное на обновлении / редактировании следующего OP:

Другой пример: моей первой задачей может быть запуск менеджера webdriver, моя вторая задача, запуск веб-сервера, а третья задача - запускать e2e-тесты каждый раз, когда меняются мои файлы. Итак, мне нужно, чтобы все эти задачи выполнялись одновременно, но их нужно инициализировать в определенном порядке и времени.

5. Запуск задач одновременно.

одновременно может использоваться для одновременного запуска задач:

$ npm i -D concurrently

Псевдо-пример с использованиемconcurrently:

"scripts": {
    "foo":  "concurrently \"npm run task1\" \"npm run task2\" \"npm run task3\""
},

Этот пример сохранит все задачи(1,2 и 3) работает одновременно, и они начнут в указанном порядке. Я не знаю достаточно подробностей об инструментах, упомянутых в вашем примере использования, однако все примеры, представленные в этом посте, могут быть скомбинированы при необходимости, чтобы удовлетворить ваши точные требования.

concurrently также имеет несколько полезныхпараметры слишком.

 André Marcondes Teixeira07 окт. 2017 г., 18:14
На самом деле, ни один из них не удовлетворяет мою потребность. Я отредактировал пост с двумя примерами для лучшего понимания.
 André Marcondes Teixeira07 окт. 2017 г., 18:17
Ваш ответ в любом случае великолепен. Я проголосовал за тебя в знак благодарности
 André Marcondes Teixeira10 окт. 2017 г., 19:42
одновременно не будет ждать пока ресурс одной задачи станет доступным, поэтому на самом деле не тот ответ, который мне нужен :(
 RobC07 окт. 2017 г., 21:20
Спасибо Андре - на основе примера использования, приведенного в вашем редактированииодновременно вероятно то, что вы ищете? Смотрите обновленный / отредактированный ответ.

Ваш ответ на вопрос