dimanche 16 juillet 2017

A pattern to handle 0-n promises?

I have to wait for 0-n promises. I currently check if I have 0, 1 or more promises and then either call no promise, one promise or Promise.All.

It seems poor style to me, that the return this._createItemAndReloadItems(logItem) part repeats three times. Is there a better pattern to achieve this?

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); });
  }
}

Is there a better pattern to deal with the dynamic amount of promises?

Aucun commentaire:

Enregistrer un commentaire