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ür bluebird.Promise<IPlayerProfile> ile uyumsuzdur.
  • Hiç kimse limiter.schedule(...)'in "vanilla", yani yerel bir Promise<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:

    1. Kodunuzun her yerinde o promise türünü kullanın, bluebird’in promise’lerine tamamen bağlı kalmak yerine; veya
    2. O vaat türünü bir bluebird tü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.

İlgili makaleler