Какой поток делает код JavaScript, названный от Flash, выполняются на?

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

В ответах на этот поток Stackoverflow имеется гораздо больше информации (которая займет некоторое время) вопрос .

16
задан Lightness Races with Monica 20 January 2012 в 12:34
поделиться

1 ответ

Это находится все еще на том же потоке. Однако для наиболее практических целей, если у Вас есть такой продолжительный JavaScript, что Вы волнуетесь, Ваша "основная" задача могла бы заблокировать вызов от setTimeout, необходимо рассмотреть пересматривание базового подхода.

Обновление для щедрости:

, Чтобы подробно остановиться на более общем вопросе поточной обработки в JavaScript, существует большое обсуждение с очень разоблачающим ответом от Bobince. Он цитирует некоторые очень интересные сценарии, которые могли бы подвергнуть сомнению, можем ли мы действительно полагать, что JS является однопоточным, и его заключение "не совсем".

заключение комментариев, с которыми я соглашаюсь, состоит в том, что с точки зрения во времени выполнения JS, вселенная является однопоточной, но , потому что инфраструктура, окружающая песочницу JS, не однопоточная, это может достигнуть в песочнице и навозе с состоянием неожиданными способами . Из времени выполнения некоторый неизвестный объект может "приостановить законы природы" и менять вещи. Но время выполнения не имеет никакой конструкции поточной обработки для обработки того сценария исходно.

я думаю, что самый важный способ приблизиться к вопросу состоит в том, чтобы спросить, что мы подразумеваем под многопоточностью в практическом сценарии? Обычно поточная обработка проблем сводится к вещам как синхронизация, которая мы должны предположить, что поставщики браузера решили для нас, потому что снова, JavaScript не имеет никакой собственной конструкции для того, чтобы даже попытаться иметь дело с нею самих. Заламывание рук о поточной обработке делает отрицательный результат без инструментов для фиксации его; никакие взаимные исключения или блокировки.

So, откладывая те виды катастрофических проблем, мы до вещей как, возможно, значение, неожиданно изменяется из-под нас. Но правильно написанный код должен согласиться с этим. Даже в Bobince' пример, весь включенный код является все еще кодом, который мы добровольно включали в страницу (даже записал нас), настолько уверенный, могло бы быть удивительно, если тот код запущен, в то время как Ваш основной стек вызовов якобы "заблокирован". Но снова говоря с практическими проблемами, какова худшая вещь, которую Вы могли сделать себе в том сценарии? Ничто слишком серьезное.

, Таким образом, это - мой длинный путь сказать: Я не знаю ни о какой документации от поставщиков браузера, где они говорят недвусмысленно, является ли их реализация JS однопоточной или нет, но я подвергаю сомнению, имеет ли это значение.

10
ответ дан 30 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: