2017-05-11 51 views
0

功能得到回調,我有一些JavaScript代碼,類似於以下內容:如何從調用內部變量

var Requests = { 
    get: function(search) { 
    // HTTP request happens, returns data. 
    } 
} 

我想別的調用這個地方,像下面這樣:

Requests.get('thing'); 

雖然這是返回undefined,因爲它沒有等待http請求結果。我想知道如何推遲這個請求,直到它成功,或者以某種方式檢查調用代碼中的回調。謝謝!

+0

查看Promises:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise。 –

+0

我在看如何正確地做到這一點,但無法弄清楚正確的語法。有任何想法嗎? @EduardoMelo –

回答

0

你需要一個承諾。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise

var Requests = { 
    get: function(search){ 
     return new Promise(resolve,reject){ 
      //if it does what you want 
      if(data) resolve(data) 
      else reject(error) 
     } 
    } 
} 

然後

Requests.get('thing').then('do something else') 

另一種選擇是使用的await /異步但尚未完全支持。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

0

該函數可以返回一個承諾:

var Requests = { 
    get: function(search) { 
    return new Promise(function(resolve, reject){ 
     // call resolve in case of success, and reject in case of error 
    }) 
    } 
} 

Requests.get('thing').then(
    function(response){ 
    // success 
    }, 
    function(error){ 
    // something went wrong 
    } 
); 

在無極對象的「再」的方法,你需要傳遞時的承諾得到解決或者拒絕使用這兩種功能。

有關承諾的更多信息:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise