2017-05-04 11 views
0

ブラウザのUIを更新するために、trueを返す必要があるjavascript関数があります。バックエンド呼び出しを行うコードを実行する前に関数が返ってくることを確認するにはどうすればよいですか?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

は、私はあなたがそれが本当であれば、そうで

非同期すでに、あなたのコードを

を(XHR /フェッチ)self.backendCall内部のAJAX要求を持っている想像し、@麻の答え

を見て

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

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

 
console.log(test())

+1

警告の単語、フェッチAPIはIEのどのバージョンでもサポートされていません。 – hemp

+1

@hemp Nighterは矢印の機能ですが、XHRはこのデモのために書き留めるような混乱です。 – Benjaco

2

ブラウザJSと仮定すると、あなたは普遍的、これはbackendCallのコードが実行される前に、現在のコードパスが終了することを保証しますが、それは時期について何か言っていないのsetTimeoutを使用することができます(あなたがタイムアウト時間を指定しない限ります。)

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

普通のJです。そんなことはできませんでしたが、コメントごとに、コードはすでにasycです –

+0

私は指定子として "regular JS"に慣れていません。たとえそれがブラウザにあっても、どのブラウザがターゲットにされているかによって大きな違いが生じます。 – hemp

+0

申し訳ありませんが、私は、バックエンドサービスを呼び出すためにajaxをやってブラウザ(クロム)からjavascriptを意味しました。ここではフレームワークを使用していません。 –

関連する問題