2017-04-10 18 views
0

これはバニラのJavaScript用です。別の機能が完全に終了するとすぐに実行する機能はありません。今、私が実際に動作する何かを持っているが、私はそれがよりよく行うことができたとします(JavaScript)他の関数からのコールバックで関数を実行する

setTimeout(function() { 
    // does things with the variables a, b(array) and c 
}, 500); 
function happySunshine(some inparameters){ 
    // calculates and sets variables a, b(array) and c 
} 

happySunshine機能は残念ながら順番に私のsetTimeout関数の後に置く必要があり、これを変更することはできません。

これは、happySunshine関数が実行され、半分の時間(setTimeoutが実行前に待機するように設定されている)のタスクを完了したために機能します。

私は知りませんでした。最初に関数を作成し、実行する前に別の関数(後の順序)が完全に終了するまで待つ方法はありますか?

これらの機能は同じスコープにあることはできません。

+0

なぜ 'setTimeout()'コールが必要ですか? – guest271314

+0

なぜ関数を宣言してhappySunshine()から呼び出すのはなぜですか?必要に応じてパラメータを渡すことさえできます。 – mligor

+0

setTimeout()は私が今問題を解決した方法ですが、実際には必要ありません。私が書いたように –

答えて

1

あなたはPromise.resolve()又はPromiseプロパティと値aを有するオブジェクトに設定された値とhappySunshine()からコンストラクタ、bcを返すことができます。

function happySunshine(/* some inparameters */){ 
    // calculates and sets variables a, b(array) and c 
    // return new Promise(function(resolve, reject) { 
     // do stuff 
     // resolve({a:a, b:[], c:c}); 
    // }); 
    return Promise.resolve({a:a, b:[], c:c}); 
} 

happySunshine(/* some inparameters */) 
.then(function({a, b, c}) { 
    // does things with the variables a, b(array) and c 
}) 
+0

これは面白そうですが、私はそれを本当に理解していません。あなたはそれが何をしているのか説明できますか?私を助けてくれてありがとう! –

+0

[約束のポイントがありません](https://gist.github.com/domenic/3889970) – guest271314

+0

ありがとうございますguest271314 –

0

は、あなたがあなたのhappySunShine()メソッドは、これは動作しませんグローバルそうでない場合は利用可能であるべきである。この

function initialFunction(){ 
//Do you magic here 
happySunShine(params); 
} 

のようなものを試してみました。

+0

Thanks Spharah、これはうまくいきませんが、 "ここでは魔法をかけますか?"はhappySunShine(params)が前に実行されることに依存しているためです。 –

関連する問題