Я изучаю API JavaScript async / await
и реализую пример кода из MDN.
В одном разделе, подробно описывающем различия между async/await
и promise.then()
, написано следующее:
var resolveAfter2Seconds = function() {
console.info("starting slow promise");
return new Promise(resolve => {
setTimeout(function() {
resolve(20);
console.info("slow promise is done");
}, 2000);
});
};
var parallel = function() {
console.info('==PARALLEL with Promise.then==');
resolveAfter2Seconds().then((message)=>console.info(message));
// in this case could be simply written as console.info(resolveAfter2Seconds());
}
setTimeout(parallel, 10000);
Я с подозрением отнесся к тому, что говорит
// in this case could be simply written as console.info(resolveAfter2Seconds())
Итак, я запустил код и получил следующее:
starting slow promise
Promise { <pending> }
slow promise is done
Пытается ли комментарий кода примера MDN подразумевать, что вместо Promise { <pending> }
я должен видеть 20
? Почему?
Это похоже на опечатку в документации - потенциально может быть записан console.info(await resolveAfter2Seconds())
- вы должны сделать запрос на изменение
@Michael, это было бы здорово, но я не уверен, что код работает. Я попробовал console.info( await resolveAfter2Seconds());
и получил SyntaxError: missing ) after argument list
@CalebJay: вы можете использовать только await
внутри async function
.
@Jacob, да ладно, и в моей предыдущей версии этого комментария я пропустил еще одну синтаксическую ошибку; Это работает: var trythis = async function(){ console.info(await resolveAfter2Seconds()); } trythis();
Да, эта страница выглядит не очень хорошо. Они также не показывают пример await Promise.all(…)
и содержат конкурентный антипаттерн await
s.
вы могли бы сделать это: .then(console.info)
Комментарий кода примера выглядит совершенно неверным.