console.log () просто печатает его на консоли, есть ли способ сохранить его в переменной?
blockquote>Поскольку
fetch
является асинхронным процессом, вы никогда не будете возможность присвоить значениеtext
, как это. На данный момент самое современное использование современных браузеров - это использованиеasync
/await
.
// Mock `fetch` to return a value after 1.5s function getText(url) { return new Promise(resolve => { setTimeout(() => resolve('Hallo'), 1500); }); } // Unfortnately `await` has to be used in conjunction // with async so we have to use an immediately-invoked // async function expression here (async () => { // `await` for the promise to resolve const text = await getText("foo.txt"); console.log(text); })();
Please wait 1.5s
Это находится все еще на том же потоке. Однако для наиболее практических целей, если у Вас есть такой продолжительный JavaScript, что Вы волнуетесь, Ваша "основная" задача могла бы заблокировать вызов от setTimeout, необходимо рассмотреть пересматривание базового подхода.
Обновление для щедрости:
, Чтобы подробно остановиться на более общем вопросе поточной обработки в JavaScript, существует большое обсуждение с очень разоблачающим ответом от Bobince. Он цитирует некоторые очень интересные сценарии, которые могли бы подвергнуть сомнению, можем ли мы действительно полагать, что JS является однопоточным, и его заключение "не совсем".
заключение комментариев, с которыми я соглашаюсь, состоит в том, что с точки зрения во времени выполнения JS, вселенная является однопоточной, но , потому что инфраструктура, окружающая песочницу JS, не однопоточная, это может достигнуть в песочнице и навозе с состоянием неожиданными способами . Из времени выполнения некоторый неизвестный объект может "приостановить законы природы" и менять вещи. Но время выполнения не имеет никакой конструкции поточной обработки для обработки того сценария исходно.
я думаю, что самый важный способ приблизиться к вопросу состоит в том, чтобы спросить, что мы подразумеваем под многопоточностью в практическом сценарии? Обычно поточная обработка проблем сводится к вещам как синхронизация, которая мы должны предположить, что поставщики браузера решили для нас, потому что снова, JavaScript не имеет никакой собственной конструкции для того, чтобы даже попытаться иметь дело с нею самих. Заламывание рук о поточной обработке делает отрицательный результат без инструментов для фиксации его; никакие взаимные исключения или блокировки.
So, откладывая те виды катастрофических проблем, мы до вещей как, возможно, значение, неожиданно изменяется из-под нас. Но правильно написанный код должен согласиться с этим. Даже в Bobince' пример, весь включенный код является все еще кодом, который мы добровольно включали в страницу (даже записал нас), настолько уверенный, могло бы быть удивительно, если тот код запущен, в то время как Ваш основной стек вызовов якобы "заблокирован". Но снова говоря с практическими проблемами, какова худшая вещь, которую Вы могли сделать себе в том сценарии? Ничто слишком серьезное.
, Таким образом, это - мой длинный путь сказать: Я не знаю ни о какой документации от поставщиков браузера, где они говорят недвусмысленно, является ли их реализация JS однопоточной или нет, но я подвергаю сомнению, имеет ли это значение.