IMHO, cari cevap ciddi kullanım için yetersiz Sözün çözüldüğü zaman için tip kontrolünü etkin bir şekilde devre dışı bıraktığı için.
daha iyi bir yaklaşım Promise.all
olmayan-mutlaka arası atanabilir değerleri sonlu sayıda çağrıldığında için ek yük imzalarla (tip PromiseConstructor
arasında) Promise
nesnenin doğal tip tanımı uzanan bir his :
interface PromiseConstructor
{
all<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): Promise<[T1, T2]>;
all<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): Promise<[T1, T2, T3]>;
...
}
İstediğiniz kadar fazla aşırı yükleme ekleyin. Bu yaklaşım onfulfilled
geri arama value
argüman tüm öğeler için tam tip güvenlik sağlar:
Promise.all([1, "string", true]).then(value => {
var a: number = value[0]; // OK
var b: number = value[1]; // Type 'string' is not assignable to type 'number'.
...
});
En mükemmel! –
Visual Studio Kodu, sözdizimi, ancak yapı sistemimde bulunan '' tslint'' ifadesinin şunları doğruladığını onaylıyor: '' 'dizi doğru olarak bildirilmiyor, Type [] ya da Array' '' olmalıdır. Garip bir şekilde, bu hata mesajının aranması tam olarak ** 0 ** sonuç verir. –
bu yüzden yazalım: diyelim: Array, Promise > = [aurelia.start(), entityManagerProvider.initialize()]; ' –