2017-05-04 76 views
0

我有一个JavaScript函数需要返回true才能更新浏览器UI。在执行代码进行后端调用之前,如何确保函数返回?从javascript函数返回值,然后在其中执行代码

self.resortCopy = function(item) { 
self.resorts.push(item); 
self.backendCall(item) // this needs to be performed after returning true 
return true; 
+0

在return语句之后真的没有办法放置函数调用,你可以希望的最好的方法是延迟执行超时,并且希望这可以起作用。 – adeneo

+0

这是浏览器JS或NodeJS?如果浏览器,它需要支持多久?如果NodeJS,哪个版本?对于可用的语言功能有所不同。 – hemp

+3

它已经是异步的。当你调用self.backendCall(item)时,js不会等待它完成并立即调用下一行'return true'。 –

回答

2

我想象你有内部self.backendCall一个Ajax请求(XHR /读取)

如果这是真的,那么你已经代码异步

否则,看看@麻的回答

function ajax(){ 
 
    fetch("https://httpbin.org/get").then(data=>{ 
 
    console.log("DONE") 
 
    }) 
 
} 
 

 
function test(){ 
 
    ajax(); 
 
    return true; 
 
} 
 

 
console.log(test())

+1

警告字,任何版本的IE都不支持获取API。 – hemp

+1

@hemp Nighter是箭头函数,但XHR为了演示而写出来很麻烦。 – Benjaco

2

假设浏览器JS,你可以使用setTimeout的普遍,这将保证当前代码路径结束backendCall代码执行前,但它并没有说别的什么时候(除非你指定一个超时期限。)

self.resortCopy = function(item) { 
self.resorts.push(item); 
window.setTimeout(self.backendCall.bind(self, item), 0); 
return true; 
+0

这是常规的Js。不知道可以这样做,但根据意见,代码已经asyc –

+0

我不熟悉“常规JS”作为说明符。即使它在浏览器中,哪些浏览器被定位也会产生巨大的差异。 – hemp

+0

抱歉,我的意思是,来自浏览器(chrome)的javascript正在调用ajax来调用后端服务。这里不使用任何框架。 –

相关问题