2

Bluebirds Collection 機能を使用してプロミス チェーンを利用しようとしています。

たとえば、スクリプトの 1 つ:

var rest = require("./promisified_restler.js");
function memory(token) {
    CHECK='cfDJO9im';
    URL='https://monitoring.api.foo.com/v1.0/833/';
    SLUG='entities/en5mKIvs/checks/';
    MODE='/test';

    url = CHECK+URL+SLUG+CHECK+MODE
    headers = { headers:
        { "X-Auth-Token": token }
    }
    return rest.post(url, headers);
}


module.exports = memory;

メインスクリプト:

var getToken = require('./get_token.js');
var memory = require('./memory.js');
var cpu = require('./cpu.js');
var http = require('./http.js');
var httpPort = require('./http_port.js');
var network = require('./network.js');

getToken()
.catch(function(e) {
    console.log(e);
})
.all([cpu(token), memory(token)]).spread(function(cpu_result,
            memory_result) {
                console.log(JSON.stringify(cpu_result));
                console.log(JSON.stringify(memory_result));
            }); 
  1. promise オブジェクトを返す各関数にトークン値を渡すにはどうすればよいですか?

  2. promise オブジェクトの 1 つが拒否された場合、Promise.all() はどうなりますか? .all() は停止し、false を返し、配列内の残りの項目を終了しませんか?

  3. 関数/promise オブジェクトは並行して実行されますか?
  4. Spread() に引数を 1 つだけ受け入れさせ、返される値ごとに適用することは可能ですか? 例: .spread(function(returnedValue) {console.log(JSON.stringify(returnedValue)); });
4

1 に答える 1

2

呼び出し方が.all()間違っています。引数は必要ありません (静的バージョンは必要です)。するつもりなら、とにかく必要ありません.spread

Promise は何も実行しません。何かが実行されたときに通知するだけです。I/O を開始する関数を呼び出すのはあなたです。次の行で別の関数を同期的に呼び出すと、両方が同時に実行されます。最初の関数が完了した後で別の関数を呼び出すと、それらは順次実行されます。はPromise.all、両方が完了したときにのみこれを表示します。他に関係はありません。

1. と 4. がわかりません。コードは次のとおりです。

getToken()
    .then(function(token) {
        return [cpu(token), memory(token)];
    })
    .spread(function(cpu_result, memory_result) {
        console.log(JSON.stringify(cpu_result));
        console.log(JSON.stringify(memory_result));
    })
    /*
    This is totally unnecessary because unhandled errors are logged anyway.
    Uncomment if you want to actually handle the error
    .catch(function(e) {
       console.log(e);
    });
    */
于 2014-05-28T09:00:23.173 に答える