【发布时间】:2020-08-25 08:22:54
【问题描述】:
我收到一个复杂的对象,假设它看起来像这样:
complexObject: {
fruits: string[],
vegetables: string[],
milk: [] | [{
expirationDate: string,
quantity: string
}]
}
所以,逻辑是,当我收到一个空对象(milk 将只是[])时,verifyObject 方法将返回 undefined(进一步的逻辑更复杂,必须接收 undefined.. .);使用空/未定义对象调用方法时也是如此。
对于牛奶,唯一的验证应该是这样的:
如果我们有牛奶,那么它需要同时具有quantity 和expirationDate,否则它应该返回 false。
问题是,当我发送这样的对象时:
{
'fruits': ['apples', 'bananas'],
'vegetables': ['tomatoes'],
'milk': [{
'quantity': '10'
}]
}
在checkAndAssign 方法中,它会看到错误,打印console.log,但它不会停在那里,它会将对象添加到result。
另外,在verifyObject方法中,会进入catch块,但upper不会抛出错误,而是解析promise,返回结果...
我想在收到错误消息时停止执行并传播错误...
这是代码:
verifyObject(complexObject) {
return new Promise((resolve, reject) => {
const result = {};
const propertiesEnum = ['fruits', 'vegetables', 'milk'];
if (!complexObject) {
resolve({ result: undefined });
} else {
this.checkAndAssign(complexObject, result)
.catch((err) => {
console.log('enter error');
reject({ message: err });
})
if (!Object.keys(result).length) {
console.log('resolve with undefined');
resolve({ result: undefined });
}
console.log('resolve good');
resolve({ result });
}
})
}
private checkAndAssign(complexObject, result) {
return new Promise((resolve, reject) => {
for (const property of complexObject) {
if(complexObject[property] && Object.keys(complexObject[property]).length)
if(property === 'milk' && this.verifyMilk(complexObject[property]) === false) {
console.log('rejected');
reject('incomplete');
}
Object.assign(result, {[property]: complexObject[property]})
console.log('result is...:>', result);
}
console.log('final result:>', result);
resolve(result);
});
}
private verifyMilk(milk:any): boolean {
for(const item of milk) {
if(!(item['expirationDate'] && item['quantity'])) {
return false;
}
}
return true;
}
【问题讨论】:
-
checkPropertyAndAssignValue是否会执行上面未显示的异步操作?
标签: javascript typescript error-handling promise