0
我必須等待0-n個承諾。我目前正在檢查是否有0個,1個或更多的承諾,然後再打電話沒有承諾,一個承諾或Promise.All。處理0-n承諾的模式?
對我來說,這看起來很差,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); });
}
}
有沒有更好的模式來處理動態承諾量?
Well'Promise.all'很好地適用於承諾的空元素和單元素數組,所以爲什麼不在任何情況下都使用它呢? – Bergi
哦,我對文檔感到困惑,至少需要兩個參數。酷,它作爲一個陣列與0,1,甜蜜的承諾:-) –
你讀過哪些文檔?它只有一個參數 - 可迭代的。 – Bergi