Это вопрос, который меня задали в интервью. Я знаю, что массив просто вернет нули, поскольку это асинхронно, но почему это происходит и как вы можете его исправить, чтобы массив результатов вставлял соответствующие данные?Javascript Интервью по обещаниям
Вопрос: Предположим, что findData - это функция, которая берет объект запроса и возвращает обещание для результата запроса. Предположим также, что someRandomArrayOfQueries - это массив объектов запроса. Объясните, что будет напечатано в следующем коде и почему:
function runMultipleQueries(queries) {
var results = [];
queries.forEach(doQuery);
return results;
function doQuery(query) {
findData(query)
.then(results.push.bind(results));
}
}
function log(value) {
console.log(value);
}
runMultipleQueries(someRandomArrayOfQueries).forEach(log);
Вы уверены, что это _vanilla JavaScript_? –
вам нужно прочитать об асинхронном javascript. Важным здесь является то, что вы не знаете, что время будет потрачено на findData. Обещание не блокирует процесс. Обещание - это только обещание, что, когда у него будут данные, он выполнит код внутри, или ошибку внутри catch. Функция возврата будет выполняться ранее, чем тогда, потому что процесс javascript продолжает строку кода. –
@PaulS. Код выглядит нормально. –