2017-09-09 13 views
-1

私はリンクhttps://developer.mozilla.org/en-US/Add-ons/WebExtensions/Your_second_WebExtensionを経由していました。 choose_beast.jsスクリプトでキーワードthen()を理解できませんでした。私はそれが何かjavascriptの約束に関連していることを知っています。この文脈で、簡単な言葉の約束とその使用について説明できますか?非同期プロミスと()

+0

https://developers.google.com/web/fundamentals/getting-started/primers/promises https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise –

+0

私はすでにそれを読んだことがありますが、簡単に理解できませんでした。 –

+0

関連:[私の変数は、関数内で変更した後に変更されないのはなぜですか? - 非同期コードリファレンス](https://stackoverflow.com/q/23667086) – Makyen

答えて

0

同期コードと非同期コードを比較しましょう。

let a = someAsyncFuntion(); 
let b = a * 3; // runs into error 
:通常の同期コードを見

bが設定され、それが非同期コードを見

を使用する次のラインのために利用可能である前

let a = Date.now(); 
let b = a * 3; 

aが設定されています

aは、bが設定される前に設定されておらず、次の行には使用できません。 eが使用されるため、エラーになります。

someAsyncFuntion()は、次のプロセスが利用可能なときに実行されるようにキューに入れられます。パーサーはlet b = a * 3;に移動しますが、ここではaはまだ設定されていないため、エラーが発生します。

簡単な言葉では、プロミスでは、関数は非同期に実行されるようにキューに入れられます。したがって、それが終わったら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 */); 

私は助けてくれることを望みます。

関連する問題