2017-05-11 50 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