私は0-n約束を待たなければなりません。私は現在、私が0、1、またはそれ以上の約束を持っているかどうかを確認してから、約束、約束または約束を呼んではいけません。0-n約束を扱うパターン?
return this._createItemAndReloadItems(logItem)
部分が3回繰り返されているように私には貧弱なスタイルのようです。これを達成するためのより良いパターンがありますか?
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'は、空の配列と単一要素の配列の配列でもうまく動作しますので、どのような場合にも使用してみてください。 – Bergi
私はドキュメンテーションに混乱しました。少なくとも2つのパラメータが必要でした。 0,1、n約束で配列と同じように甘く動作します:-) –
どのドキュメントをお読みになりましたか?それは1つのパラメータだけを持っています - 繰り返し可能です。 – Bergi