Асинхронное обещание и затем ()

Я шел по ссылке 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 */ );

Надеюсь, это поможет.

Другие вопросы по тегам