2017-08-24 12 views
0

私は小さな問題(実際に好奇心の問題のようなもの)があります。条件が満たされ、適切なコードが実行されると、何らかの条件を作成することは可能ですか?もちろん、setIntervalとsetTimeoutを使用しないでください。またはコールバックですか?多分AJAX?JS「できるだけ早く」状態

var x; 
if (x != "undefined") { 
    //code to be executed 
} 

setTimeout(function() { x = 3.14; }, 5000); 

//after those let's say 5 seconds (the time is random) x becomes defined and the code above is executed 

ありがとう!

+1

あなたが使用できない理由https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise – Isaac

+0

AJAXは、リモートサーバーからデータを取得するために使用された約束を調べます'seetTimeout'または' setInterval'? – alexmac

+0

あなたは本当に何をしようとしていますか? –

答えて

1

、あなたはセッターのパターンを使用して試すことができます:

var obj = {}; 

Object.defineProperty(obj, 'x', { set: function(xval) { /* do stuff; */ } }); 

// some time later in the code ... 

obj.x = somevalue 

// do stuff will fire 

または、オブジェクト初期化子で:

var obj = { 
    set x(xval) { 
     // do stuff; 
    } 
} 

// some time later in the code... 

obj.x = somevalue 

// do stuff will fire 

唯一の(しかし任意の)値コールバックに明示的に渡すことができるのは、バウンドプロパティを設定する値(xの値)です。 (もちろん、あなたはobjのスコープが見ることができるものを参照することができます)。

も参照してください:

-2

promisesを使用して可能な解決策:あなたがオブジェクトの内部xをラップして、OKなら

var x; 

var promise = new Promise(function(resolve,reject) { 
    setTimeout(function() { 
     x = 3.15; 
     resolve(); 
    },3000) 
}); 

promise.then(function(){ 
    console.log("code to be executed") 
    console.log(x) 
}); 
+0

注:約束は驚くべきことです、それらを学び、それらをよく学びます – Isaac

+3

OPはsetIntervalとsetTimeout_を使わずに言いました。そして、なぜこの場合に約束を使用するのですか?とにかくコールバックを呼びます。 – alexmac

+1

私は人々がこの答えをdownvotingする理由を理解していません。確かに、彼は 'setTimeout'を使いましたが、彼の解決策は約束です。約束は 'setTimeout'に本質的に依存しません。 'setTimeout'がなかったとしても、このコードはまだ動作します。 –

関連する問題