我正在尝试使用打字稿来获取许多客户的账单:
我有一个Server类,处理对服务器的查询,并提供一个getBills
类,该类返回一个Promise<Bill[]>
:
class Server {
constructor(hostname?: string) {
hostname = hostname || "";
}
getBills(customer: Customer): Promise<Datapoint[]> {
const apiEndPoint = new URL("/API/Bills");
let parameters = { customer: customer.name};
//Fetch official doc
//https://github.com/whatwg/fetch/issues/56
Object.keys(parameters).forEach(key => apiEndPoint.searchParams.append(key, parameters[key]));
return fetch(apiEndPoint.toString())
.then(response => {
if (!response.ok) {
throw new Error(response.statusText)
}
return response.json()
})
}
}
我想查询几个客户的账单,并返回一个Map进行进一步处理(并使它们保持异步状态,Promise<Map<Customer, Bill[]>>
,但是我在这一步上很挣扎。
到目前为止我所拥有的:
getBills(): Promise<Map<Customer, Bill[]>> {
let server = this.context.server;
let resultMap = new Map<Customer, Bill[]>();
let promises = [];
for (let customer of this.customers) {
promises.push(
server.getBills(customer).then(result => resultMap.set(customer, result))
);
}
Promise.all(promises).then(return resultMap);
}
但是它不能编译,因为它试图返回地图本身,而不是Promise。
我尝试使用
Promise.all(promises).then(return Promise.resolve(resultMap));
但也不起作用。
你能指出我正确的方向吗?
答案 0 :(得分:2)
写这是语法错误:
.then(return resultMap);
then
方法必须接收一个函数作为参数,而return
只是一个语句,而不是一个函数。因此更改为:
.then(() => resultMap);
答案 1 :(得分:1)
@trincot已经解释了语法错误,但是我建议不要构造return Promise.all(promises).then(() => { return resultMap; });
,除非获得所有结果:
Map