0

私は、非同期プログラミングとプロミスの使用について頭を悩ませようとしてきました。それらを理解するのを助けるために、いくつかの簡単なネストされたコードを書きましたが、問題が発生しました。

コードは次のとおりです: http://pastebin.com/hBtk9vER ライブラリのインストール時に必ずインストールしてください (npm install)

var when = require('when');

function promise() {
  console.log("Promise");
    promiseRead().then(function(string) {
    console.log("Inner promise");
    console.log(string);
    });
}

function promiseRead() {
  console.log("PromiseRead");
  return baz().then(function() {
    console.log("Inner Read");
    var deferred = when.defer();
    setTimeout(function() {
      deferred.resolve("Hello World");
    }, 5000);
  });
}

function baz() {
  console.log("BAZ");
  return when(true); 
}

promise();

私の問題は、解決後console.log(string)にあると予想していたときに未定義であることです。興味深いことに、タイムアウトを削除すると、期待どおりに機能します。タイムアウトが終了する前に関数がコードを実行している理由を説明できる人はいますか。"Hello World"promiseRead()promisepromiseRead()

とても有難い

4

2 に答える 2

2

promiseRead() で遅延オブジェクトを返す必要があるようです

于 2014-01-16T12:14:13.710 に答える