2016-05-23 13 views
1

にコンソールロギングを活用:私はこのように少し見えるネイティブJavaScriptの約束チェーン持ってネイティブのJavaScript約束チェーン

function promiseFunction() { 
    return new Promise(function(resolve,reject) { 
    someCallbackfunction(arg, function(err, data){ 
     if (err) { 
      return reject(err); 
     } 
     console.log("some message"); 
     return resolve(data); 
    }); 
    }); 
} 

マイ:約束の機能はほとんどない。このようになります

function chain() { 
    promiseFunction1().then(function(data) { 

    console.log("some message"); 
    return promiseFunction2(); 

    }).then(function(data) { 

    console.log("some message"); 
    return promiseFunction3(); 

    }).then(function(data) { 

    console.log("some message"); 
    return promiseFunction4(); 

    }).catch(function(error) { 
    console.error(error.stack); 
    }); 

} 

をコードは私が言うことができるものからうまく解決するようです(エラーはなく、私は必要な操作が実行開始されたことを端末のフィードバックから伝えることができます)。ロギング。

1)これらの文は、私が期待しているように印刷されないのはなぜですか?

2)冗長な出力を取り戻すにはどうすればよいですか?

+0

コールバック関数の内部から 'some message'を取得していますか?そうでない場合、 'someCallbackFunction'は責任を負います。 – Bergi

+0

'console.error("エラー "、エラー)'を試してください。 'error.stack'は、コールバックベースの関数が拒否したものについては未定義であり、そのためにログを取得していない可能性があります。 – Bergi

+0

@Bergi 'console.error(" Error "、error)'を使ってみましたが、成功しませんでした。また、いくつかのメッセージは、promise関数やsomeCallbackの中で呼び出されません。私は事実を知っている最初の2つのいくつかの約束関数は、私は彼らの操作のメッセージが 'journalctl'に表示されることを見ることができるので正しく解決する – MSB

答えて

-1

最終的に問題は外部になっていたことが判明しました。 私の約束チェーンのどこかに、コールバック機能を備えた外部ライブラリを呼び出しましたが、ライブラリが応答せずにチェーンが永遠に待っていました。

同様のことが起こった場合は、チェーン内のすべての機能を同じようにチェックすることをお勧めします。

これをすばやくデバッグするには、x時間後に解決するチェーンの各プロミス関数にタイムアウトを設定することができます。そうすれば、少なくとも永遠に暗闇の中で遭遇することなくログ結果を得ることができます。

関連する問題