我有一些类似于以下内容的Javascript代码:
var Requests = {
get: function(search) {
// HTTP request happens, returns data.
}
}
我正试图在其他地方调用它,如下所示:
Requests.get('thing');
虽然这是返回undefined,因为它没有等待http请求结果。我想知道如何推迟这个请求,直到它成功,或以某种方式检查调用代码中的回调。谢谢!
答案 0 :(得分: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 / async但尚未完全支持。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
答案 1 :(得分:0)
该函数可以返回一个承诺:
Action closeAction = new AbstractAction(){
public void actionPerformed(ActionEvent e){
dispose();
}
};
KeyStroke esc = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0);
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(esc, "closex");
getRootPane().getActionMap().put("closex", closeAction);
KeyStroke ctrlW = KeyStroke.getKeyStroke("control W");
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ctrlW, "close");
getRootPane().getActionMap().put("close", closeAction);
在"然后"在Promise对象的方法中,您需要传递解析或拒绝promise时使用的两个函数。
有关Promises的更多信息:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise。