【发布时间】:2017-07-17 01:03:00
【问题描述】:
我必须等待 0-n 个承诺。我目前检查我是否有 0、1 或更多的 Promise,然后调用 no Promise、一个 Promise 或 Promise.All。
在我看来,return this._createItemAndReloadItems(logItem) 部分重复了三遍,这似乎很糟糕。有没有更好的模式来实现这一点?
public createItem( logItem: IInteractionLogItem): Promise<IInteractionLogItem[]> {
const userPromises: Promise<{}>[] = [];
if(logItem.Client && logItem.Client.AccountName){
userPromises.push(this._ensureUser(logItem.Client));
}
if(logItem.AssignedTo && logItem.AssignedTo.AccountName){
userPromises.push(this._ensureUser(logItem.AssignedTo));
}
if(logItem.ResolvedBy && logItem.ResolvedBy.AccountName){
userPromises.push(this._ensureUser(logItem.ResolvedBy));
}
if(logItem.Referrer && logItem.Referrer.AccountName){
userPromises.push(this._ensureUser(logItem.Referrer));
}
console.log("SharePointDataProvider.CreateItem: userPromises.length=" + userPromises.length);
if( userPromises.length == 0)
{
return this._createItemAndReloadItems(logItem);
}
else if( userPromises.length == 1)
{
return userPromises[0].then( (value: {}) => { return this._createItemAndReloadItems(logItem); });
}
else
{
return Promise.all(userPromises).then( (value: {}[]) => { return this._createItemAndReloadItems(logItem); });
}
}
是否有更好的模式来处理动态数量的承诺?
【问题讨论】:
-
好吧,
Promise.all也适用于空的和单元素的 Promise 数组,那么为什么不在每种情况下都使用它呢? -
哦,我被文档弄糊涂了,它至少需要两个参数。很酷,它与具有 0,1,n 承诺的数组一样有效:-)
-
您阅读了哪些文档?它只有一个参数 - iterable。
-
智能感知,自动补全
标签: javascript typescript design-patterns promise