2017-10-28 15 views
-1

私は約束と約束を理解しようとしています。 私の理解によれば、次のコードは 'hello!'を出力する必要があります。コンソールに接続します。しかし、それはしません。 誰もがなぜこのようなことが起こっているのか、それを行う正しい方法は何かを説明できますか?なぜこの「Promise Chaining」は機能しませんか?

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();

+7

ヒント:setTimeout' '経由で呼び出される関数の戻り値は無視されます。 'Promise'コンストラクタが提供するパラメータ(' resolve、reject')を使い、 'resolve'を呼び出す必要があります。 – jcaron

+3

約束をどのように作成するかについて少し読んでみると良いスタートになるでしょう。質問はあなたがそのトピックを研究したことを実証するはずです。 – trincot

答えて

1

それは、その後に渡されるための約束は、何かにresolve必要があります。 setTimeoutは非同期呼び出しであり、その関数の戻り値は考慮されません(@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();

関連する問題