Асинхронное обещание и затем ()
Я шел по ссылке https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Your_second_WebExtension. Я не мог понять ключевое слово then() в скрипте choose_beast.js. Я знаю, что это что-то связано с обещаниями в JavaScript. Можете ли вы объяснить на простом языке обещания и использование тогда в этом контексте?
1 ответ
Давайте сравним синхронный и асинхронный код.
Глядя на обычный синхронный код:
let a = Date.now();
let b = a * 3;
a
установлен раньше b
установлен и доступен для следующей строки
Глядя на асинхронный код:
let a = someAsyncFuntion();
let b = a * 3; // runs into error
a
НЕ установлен раньше b
установлен и НЕ доступен для следующей используемой строки, поэтому это приводит к ошибке.
someAsyncFuntion()
ставится в очередь для запуска, когда следующий процесс доступен. Парсер перемещается в let b = a * 3;
но здесь a
еще не установлен, поэтому будет ошибка.
Простыми словами, в Promise функция ставится в очередь для асинхронного запуска. Следовательно, then()
когда он это сделал.
Глядя на пример на странице выше:
var gettingActiveTab = browser.tabs.query({active: true, currentWindow: true});
gettingActiveTab.then((tabs) => { browser.tabs.sendMessage(tabs[0].id, {beastURL: chosenBeastURL}); });
browser.tabs.query()
не запускается сразу и не дает результатов сразу. Поэтому мы пишем код так, чтобы когда он получал результат then()
сделай что-нибудь.
// query tabs asynchronously
var gettingActiveTab = browser.tabs.query({.....});
// once got the result THEN do something
gettingActiveTab.then( /* do something */ );
Надеюсь, это поможет.