节点承诺蓝鸟收集API和Spread()问题

Node Promises Bluebird Collections API and Spread() Questions

本文关键字:Spread 问题 API 承诺 蓝鸟 节点      更新时间:2023-09-26

我正在尝试使用Bluebirds Collection功能来利用承诺链。

其中一个脚本,例如:

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. 如何将令牌值传递给返回承诺对象的每个函数?

  2. 如果其中一个promise对象返回被拒绝,promise .all()会发生什么?.all()停止,返回false,而不完成数组中的其余项吗?

  3. 函数/承诺对象并行运行吗?
  4. 是否有可能让spread()只接受一个参数,并将其应用于返回的每个值?例子:.spread(function(returnedValue) {console.log(JSON.stringify(returnedValue)); });

您调用.all()错误,它不接受任何参数(静态版本)。如果你要去.spread,这是不需要的。

承诺不运行任何东西,它们只是告诉你什么时候运行了。您是调用某个函数来启动I/O的人——如果您随后同步调用下一行的另一个函数,那么这两个函数将并发运行。如果在第一个函数完成后调用另一个函数,它们将依次运行。Promise.all只会在两者都完成时给您一个视图,它与它们没有任何其他关系。

我不明白。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);
    });
    */