2017-02-08 13 views
0

私はJavascript promise apiを使用していますが、その中の関数は実行されていません。Promise.prototype.java内のJavascript関数が実行されていません

//defining a class Test 
var Test=function(){ 
    var x="hello from x"; 
} 

//Adding a method with Test class 
Test.prototype.someFn=function(){ 
    console.log("This is from somefn"); 
} 

//Adding another function  
Test.prototype.anotherFn=function(){ 
    var self=this; 
    var p=new Promise(
     function(){ 
     self.someFn(); 
    }) 

    p.then(
     function(){ 
      console.log("From anotherfn p.then"); 
    }) 
} 

最後に次のように呼び出します。

var t=new Test(); 
t.anotherFn(); 

出力は次のようになります。

This is from somefn 

"From anotherfn p.then"が印刷されないのはなぜですか?どんな提案もお願いします。

+0

Promiseコンストラクタのドキュメントを見ましたか? –

+0

'p.resolve(valueToResolveWith);をトリガーする場所を表示しないので、約束は決して達成されません。したがって、関数は決して実行されません。 – Shilly

答えて

3

あなたは約束を決して解決しません。

変更

var p=new Promise(
    function(){ 
    self.someFn(); 
}) 

var p = new Promise(function(resolve, reject) { 
    self.someFn(); 
    resolve(); 
}); 

にあなたは約束の内部で同期機能をラップするべきではありませんCreating a Promise in the MDN

注を参照してください。 someFnが非同期であると仮定すると、約束はその時点で返されるべきです。

+0

さて、私はキャッチを得ました。ありがとう。 –

+0

はい、実際に私はこの例を与えました。しかし、実際には私は約束の中でアヤックスを呼んでいます。 –

+1

次に、ajax関数の呼び出し後ではなく、ajax関数に渡すコールバックの約束を解決(または拒否)するよう注意してください。 –

関連する問題