我正在编写一个服务,该服务进行API调用以获取所有预订,然后从这些预订中获取所有进行这些预订的同事ID的列表。然后,我获取唯一的ID,并使用它们进行另一组调用,以获取所有同事记录的数组。完成此步骤后,我将对订单项调用执行相同的操作,但是由于某些原因,我无法获取同事对象的列表。
这是我的代码:
apiService.getBookingsList(`?size=1000&from_Booking_FromTime=${weekAgo.toISOString()}`).then(bookings => {
const bookingCoworkerIds = bookings.map(booking => booking.CoworkerId);
const bookingCoworkerIdsUnique = bookingCoworkerIds.filter(recordParser.onlyUnique);
const getCoworker = function getCoworkerInfo(coworkerId) {
return apiService.getSingleCoworker(coworkerId);
}
const bookingCoworkerCalls = bookingCoworkerIdsUnique.map(coworkerId => getCoworker(coworkerId));
const bookingCoworkers = Promise.all(bookingCoworkerCalls);
bookingCoworkers.then(coworkers => {
console.log(coworkers.length);
console.log(coworkers[0]);
});
});
这是apiService.getSingleCoworker的代码:
getSingleCoworker(coworkerId) {
// returns a single coworker object given their ID
return httpsRequest.createRequest(this.URL.coworkerList + `?Coworker_Id=${coworkerId}`, {}, this.requestHeaders, 'GET')
.then(result => JSON.parse(result).Records[0]);
}
我也可以发布我的https代码,但是我认为这不是问题。
我怀疑我的诺言模式做错了,因为我对诺言和异步代码一般还是陌生的。这些控制台日志均未到达,而是唯一的输出是:
(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): SyntaxError: Unexpected end of JSON input
那我在做什么错了?
答案 0 :(得分:0)
使用诺言的想法是链接“ then”调用(或命令)。
为此,一个promise必须返回另一个promise或一个值。
赞:
apiService.getBookingsList(`?size=1000&from_Booking_FromTime=${weekAgo.toISOString()}`)
.then(bookings => {
const bookingCoworkerIds = bookings.map(booking => booking.CoworkerId);
const bookingCoworkerIdsUnique = bookingCoworkerIds.filter(recordParser.onlyUnique);
const bookingPromises = bookingCoworkerIdsUnique.map(coworkerId => apiService.getSingleCoworker(coworkerId));
return Promise.all(bookingPromises);
}).then(coworkers => {
console.log(coworkers.length);
console.log(coworkers[0]);
}).catch(err => {
// do something with error
});
在第一个“ then”回调中,我返回Promise.all,它产生一个承诺。
下一个“ then”将通过“ all”承诺接收所有已解析的值。
请记住,promise必须始终在结尾处包含“ catch”调用,以捕获promise错误。
编辑:
getSingleCoworker(coworkerId) {
const self = this;
return new Promise(function(resolve, reject) {
httpsRequest.createRequest(self.URL.coworkerList + `?Coworker_Id=${coworkerId}`, {}, this.requestHeaders, 'GET')
.then(result => {
const jsonVal = JSON.parse(result).Records[0];
resolve(jsonVal);
}).catch(reject);
});
}
希望这会有所帮助