我正在尝试使用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));
});
如何将令牌值传递给每个返回promise对象的函数?
如果其中一个promise对象被拒绝,Promise.all()会发生什么? .all()是否停止,返回false,而不是完成数组中的其余项目?
.spread(function(returnedValue) {console.log(JSON.stringify(returnedValue)); });
答案 0 :(得分:2)
您正在调用.all()
错误,它不会接受任何参数(静态版本会这样做)。如果你要前往.spread
,则不需要它。
承诺不运行任何东西,他们只是告诉你什么时候运行。你是那个调用一些函数来启动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);
});
*/