TypeScript'te Bluebird ve ES6 sözleri
Saf JavaScript yerine TypeScript kullanmak istediğim yeni bir projeye başladım. Bluebird'i üçüncü taraf kütüphanelerle birlikte kullanmakta zorlanıyorum.
Şu örneğe bakın:
import * as Promise from 'bluebird'
private requestPlayerProfile(playerTag:string):Promise<IPlayerProfile> {
const requestOptions = Object.create(this.options)
return this.limiter.schedule(request, requestOptions)
}
Problem: limiter üçüncü taraf bir kütüphanenin bir örneğidir ve limiter.schedule görünüşe göre yerel bir promise döndürmektedir, oysa uygulamamın geri kalanında Bluebird promise'lerini kullanıyorum. Bu tür durumları düzgün bir şekilde nasıl ele alabilirim?
[ts] 'Promise' türü 'Bluebird' türüne atanamaz. 'then' özelliğinin türleri uyumsuz.
Cevap #1
@Filipe hata mesajını doğru bir şekilde yorumluyor.
this.limiter.schedule(...)tarafından döndürülen nesne türü ne olursa olsun, bu türbluebird.Promise<IPlayerProfile>ile uyumsuzdur.- Hiç kimse
limiter.schedule(...)'in "vanilla", yani yerel birPromise<IPlayerProfile>nesnesi döndürdüğünü güvenilir bir şekilde varsayamaz. Bunu,schedule(...)'in tanımlandığı kaynak koda giderek kolayca anlayabilirsiniz. Ben Visual Studio kodumda oraya gitmek için F12 tuşunu kullanıyorum. Orada nesnenin kesin dönüş türüne dikkat edin. Tam olarak ne döndüğüne bağlı olarak, iki ana seçeneğiniz var:
- Kodunuzun her yerinde o promise türünü kullanın,
bluebird’in promise’lerine tamamen bağlı kalmak yerine; veya
- Kodunuzun her yerinde o promise türünü kullanın,
- O vaat türünü bir
bluebirdtürüne dönüştürün. Kendim denemedim ama aşağıdaki işe yaramalı:return Promise.resolve(this.limiter.schedule(request, requestOptions))(bkz. http://bluebirdjs.com/docs/api/promise.resolve.html).
Umarım yardımcı olur.