Если я вызываю функцию, которая возвращает объект Promise, последовательно несколько раз порядок выполнения этих асинхронных операций будет таким же, как порядок, в котором были созданы объекты Promise?
Нет, порядок не будет прежним
Полагаю, это первый пришел первый обслужен
Он спрашивает не об этом, и ответ - да, порядок будет таким же, но когда они будут закончены, не будет прежним.
Это во многом зависит от реализации вызываемой функции. Нет, обещания обычно не дают такой гарантии.
Я понимаю, что JS является однопоточным. Итак, если необходимо выполнить несколько асинхронных операций, значит ли это, что они поставлены в очередь и выполняются одна за другой, ИЛИ это то, что JS переключит поток с одной операции на другую?
Если вы создаете обещание на основе действия пользователя (скажем, кнопку фильтра), а затем просто устанавливаете пользовательский интерфейс с результатом по мере их поступления (обещания разрешаются), тогда у вас есть проблема. Пользователь может выбрать ABC, но обещает разрешить ACB, поэтому последним действием пользователя было C, но пользовательский интерфейс показывает B. Обычный (плохой) способ справиться с этим - запретить пользователю что-либо делать, пока не будет выполнено обещание. Однако вы можете позволить пользователю делать то, что они хотят, и устанавливать пользовательский интерфейс только в том случае, если это было последнее запущенное обещание с что-то вроде этого.
Даже если ваш код работает в одном потоке, когда вы делаете что-то вроде fetch(url);fetch(url), может быть несколько потоков (параллельных), потому что метод выборки является родным.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Порядок выполнения обещаний будет таким же, как порядок, в котором были созданы обещания, да, но они не обязательно будут выполняться в том же порядке. Они будут разрешены всякий раз, когда их задача будет завершена, например, запрос api завершен, и мы получим данные.
Это зависит от реализации функции и того, что вы подразумеваете под «выполнением этих асинхронных операций».
Обычно функция, возвращающая обещание, синхронно запускает асинхронную операцию, и все, что она делает: Начинать операцию. Затем операция продолжается и завершается независимо от функции, которая ее запустила.
Итак, если вы сделаете это:
var p1 = foo(1);
var p2 = foo(2);
var p3 = foo(3);
... и foo синхронно запускает асинхронную операцию, когда вы ее вызываете, тогда да, асинхронные операции будут начал в том порядке, в котором были созданы обещания.
Это не означает, что они продолжаются или завершаются в этом порядке, а на самом деле они могут и не работать. Это зависит от рассматриваемых операций.
Пример:
function foo(value) {
return new Promise(resolve => {
console.info("starting " + value);
setTimeout(function() {
console.info("completing " + value);
resolve(value);
}, value == 2 ? 800 : 200);
});
}
var p1 = foo(1);
var p2 = foo(2);
var p3 = foo(3);
// Naturaly, in real code, we'd have error handlers on thosefoo запускает операции по порядку, но они завершаются не по порядку, потому что операция для 2 занимает больше времени, чем операции для 1 и 3.
Я так не думаю, тот, кто решит проблему первым, вернется первым, и это не обязательно будет вызвано первым.