2016-08-23 14 views
3
私は実行「」完全に機能「B」で何かする前に完了した関数内のものと次々に2つの機能を実行する必要が

のないチェーン機能...jQueryの - 延期と約束とが、setTimeoutを

私はsetTimeoutを使用していない例を見つけることができません..これは奇妙です...

私は以下の例(from here)を持っていますか?それが動作している場合はどうすればテストできますか?どのようなダミーコードを使用して、5秒から30秒かかって "SharePoint JSOMで作業する"という部分をシミュレートすることができます。

var a = function() { 
var defer = $.Deferred(); 

//do stuff with SharePoint JSOM 

console.log('a() called'); 

return defer; 
}; 

var b = function() { 
var defer = $.Deferred(); 

console.log('b() called'); 


return defer; 
}; 



a().then(b); 
+0

はい、ちょうどダミーとして 'setTimeout'を使用しています。 – Bergi

+0

'b'が非同期を何もしない場合、遅延(または約束)を返すべきではありません。 'then'は同期コールバックでも動作します。 – Bergi

+0

私がテストし読んだことによると、単にコールするコードを停止しないので、ダミーとしてsetTimeoutを使用することはできません。そして私はプリセットされた遅延を使うことはできません。 –

答えて

4

シンプルな使用promiseバニラJS)とthenでそれらをチェーン。

function a() { 
 
    return new Promise(function(resolve) { 
 
     console.log("wait two seconds ..."); 
 

 
     // this timeout is only here for demo purpose ;) 
 
     setTimeout(function() { 
 
      console.log("A"); 
 
      resolve(); 
 
     }, 2000); 
 
    }); 
 
} 
 

 
function b() { 
 
    console.log("B"); 
 
} 
 

 
a().then(b);

あなたはそのほぼ同じjQueryのdefferedを使用したい場合。

function a() { 
 
    var defer = $.Deferred(); 
 
    
 
    console.log("wait two seconds ..."); 
 

 
    // this timeout is only here for demo purpose ;) 
 
    setTimeout(function() { 
 
     console.log("A"); 
 
     defer.resolve(); 
 
    }, 2000); 
 
    
 
    return defer; 
 
} 
 

 
function b() { 
 
    console.log("B"); 
 
} 
 

 
a().then(b);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

こんにちは、私はこのように気付いていますが、jquery約束を使って動作する例を得ようと思っていただけです... –

+0

私の答えを@ Zertix.netに更新しました – eisbehr

+0

setTimeoutは2000ミリ秒の設定タイムアウトを修正しませんか?私は一定のタイムアウトを望んでいません。私はAが自然に終わるたびにBを実行したい。 –