2017-09-09 63 views
-1

我正在通过链接https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Your_second_WebExtension。 我无法理解choose_beast.js脚本中的关键字then()。我知道这是与JavaScript中的承诺有关的东西。你能用简单的语言解释承诺,然后在这种情况下使用吗?Asynchronous Promise然后()

+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 = Date.now(); 
let b = a * 3; 

ab之前设置设定,这是可用于要使用的下一行

寻找在一个异步代码:

let a = someAsyncFuntion(); 
let b = a * 3; // runs into error 

ab设置之前没有设置,它不可用于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 */); 

我希望有帮助。