簡體   English   中英

為什么這個“承諾鏈”不起作用?

[英]Why isn't this 'Promise Chaining' working?

我試圖理解承諾和承諾鏈。 根據我的理解,以下代碼必須打印 'hello !' 到控制台。 但是,它沒有。 任何人都可以解釋為什么會發生這種情況以及正確的方法是什么?

 function func01() { console.log('func01'); return new Promise(function(){ console.log('promise'); setTimeout(function(){ console.log('st'); return 'hello !' },5000); }).then(function(data){ console.log('then01'); return data; }); } function func02() { console.log('func02'); return func01().then(function(data){ console.log('then02'); return data; }) } function func03() { console.log('func03'); func02().then(function(data){ console.log('then03'); console.log(data); }); } func03();

Promise 應該resolve成一些東西,然后才能傳遞進去。 setTimeout是一個異步調用,不會考慮該函數的返回(Per @jcaron)。 結合這些,你去:

 function func01() { console.log('func01'); return new Promise(function(resolve, reject){ console.log('promise'); resolve( 'hello !' ) }).then(function(data){ console.log('then01'); return data; }); } function func02() { console.log('func02'); return func01().then(function(data){ console.log('then02'); return data; }) } function func03() { console.log('func03'); func02().then(function(data){ console.log('then03'); console.log(data); }); } func03();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM