我必须等待0-n的承诺。我目前检查我是否有0,1或更多的承诺,然后要么没有承诺,要么承诺或承诺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); });
}
}
是否有更好的模式来处理动态的承诺数量?
答案 0 :(得分:5)
我目前检查我是否有0,1或更多承诺,然后要么不承诺,要么承诺或承诺承诺。所有
整合到始终数组并使用Promise.all
e.g。
Promise.all([]) // 0
Promise.all([one]) // 1
Promise.all([one,two,three]) // n
基本上,如果您有0,1,n
个值,请使用数组来合并类型,这就是数组的用途。