Является ли Promise.All способом запуска нескольких методов параллельно даже без разрешения? - PullRequest
0 голосов
/ 30 апреля 2020

Я новичок в Promise, что знаю основы c Promise будет использовать метод, который будет обрабатывать функцию, подобную (resolve, reject) => { ... }, и обрабатывать результат соответствующим образом, и Promise.all, похоже, может работать с массивом функций параллельно манера. Тем не менее, я также вижу некоторое использование функции в Promise, которая не принимает (resolve, reject) в качестве ввода, а просто делает new Promise(() => { return 1 + 1;}), поэтому, если у меня есть пара функций, которым не нужно resolve, например,

function sum(a, b) { return a + b; }
function sub(a, b) { return a - b; }
function multiple(a, b) { return a * b; }

Если я использую Promise.all для трех функций, значит ли это, что я запускаю 3 из них параллельно? Что-то вроде

Promise.all([()=>sum(1,2), ()=>sub(1,2), ()=>multiple(1,2)])

В целом, является ли Promise.all концепцией, что мы можем запускать несколько javascript методов (будь то асинхронный c или нет, разрешать или нет) параллельно?

1 Ответ

0 голосов
/ 30 апреля 2020

Нет, Promise.all получает итератор как массив. поэтому, когда вы вызываете обещание. все перебирают переданный элемент. если они являются функцией, то ничего не происходит (мертвая функция), если вы выполнили их, возвращаемое значение проверяется, и, таким образом, эти функции выполняются синхронно. теперь подробнее о том, как он оценивает значения, перечислено ниже.

var p = Promise.all([]); // will be immediately resolved
var p2 = Promise.all([1337, "hi"]); // non-promise values will be ignored, but the evaluation will be done asynchronously just once for promise.all
console.log(p);
console.log(p2)
setTimeout(function() {
    console.log('the stack is now empty');
    console.log(p2);
});

// logs
// Promise { <state>: "fulfilled", <value>: Array[0] }
// Promise { <state>: "pending" }
// the stack is now empty
// Promise { <state>: "fulfilled", <value>: Array[2] }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...