我知道当前代码草率。我仍然对new Chart(document.getElementById("barChartHeadcount"), {
type: 'bar',
data: {
labels: ['Jan', 'Feb', 'Mar'],
datasets: [{
label: 'Billed',
backgroundColor: 'rgb(0, 197, 106)',
data: [56, 63, 67]
}, {
label: 'Unbilled',
backgroundColor: 'rgb(255, 114, 107)',
data: [1, 2, 3]
}]
},
options: {
title: {
display: true,
text: 'Community Headcount'
},
tooltips: {
mode: 'index',
intersect: false
},
responsive: true,
scales: {
xAxes: [{
stacked: false
}],
yAxes: [{
stacked: false
}]
},
plugins: {
datalabels: {
align: 'end',
anchor: 'end',
backgroundColor: function(context) {
return context.dataset.backgroundColor;
},
borderRadius: 4,
color: 'white',
formatter: function(value){
return value + ' (100%) ';
}
}
}
}
});
方法不满意。
每次致电都会返回什么
包含一些(但不是全部)结果的数组
我需要的
传递两个不同的uri并连接两个结果,然后将其导出为模块
例如getinfo(uri).getinfo(uri2).then(合并结果)
代码
then
答案 0 :(得分:1)
您只需要正确使用.then即可,而不丢弃第一个请求的结果
const request = require('request-promise');
const getInfo = (uri) => {
// Return new promise
return request({
method: 'GET',
uri: uri,
json : true,
headers: {
'User-Agent': 'Request-Promise'
}
});
}
// using promise.then
const result = (url1, url2) => getInfo(url1)
.then(val1 => getInfo(url2)
.then(val2 => val1.array.concat(val2.array))
);
// or async/await
const result = async (url1, url2) => {
const val1 = await getInfo(url1);
const val2 = await getInfo(url2);
return val1.array.concat(val2.array);
};
// both requests done at the same time
const result = (url1, url2) => Promise.all([
getInfo(url1),
getInfo(url2)
]).then(([val1, val2]) => val1.array.concat(val2.array));
export result;
//用法
const fn = require("./module.js"); // whatever you call the above file
fn("url1", "url2").then(result => {
// use result here
});
要解释result
的每个化身-使用常规函数将其写出可能会更容易,所以我可以添加注释
const result = function(url1, url2) {
return getInfo(url1)
.then(function(val1) {
return getInfo(url2)
.then(function(val2) {
return val1.array.concat(val2.array));
})
})
}
通常,您尝试避免“嵌套”。这样的话,但是由于最终结果需要同时使用val1和val2,所以这是不可避免的(不是真的,但是,可以说是这样)
这是异步/等待闪耀的地方
const result = async (url1, url2) => {
const val1 = await getInfo(url1);
const val2 = await getInfo(url2);
return val1.array.concat(val2.array);
};
因为很明显,甚至不需要重写它!
但是,您想并行运行
const result = (url1, url2) => Promise.all([
getInfo(url1),
getInfo(url2)
]).then(([val1, val2]) => val1.array.concat(val2.array));
Promise.all接受一个Promise数组,并返回一个可解析为已解决结果数组的Promise
([val1, val2]) => //rest of code
以防您不知道像
(results => {
let val1 = results[0];
let val2 = results[1];
// rest of code
所以,这应该很容易理解