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

ab 전에 설정을 설정하고 다음 줄이 비동기 코드를 보면

을 사용하는 것이 사용할 수 있습니다 :

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

ab이 설정되기 전에 설정되지 않고 다음 줄에서 사용할 수 없습니다. 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 */); 

저는 도움이되기를 바랍니다.

관련 문제