Bir JavaScript sözünün sözden başka bir şey döndürmesini nasıl sağlarım?

Bir modüldeki bir yöntemin uygulanması için bir müşteriden gelen bir spesifikasyon var:

 // getGenres():
 //  Returns a promise. When it resolves, it returns an array.

Bir tür dizisi verilirse,

['comedy', 'drama', 'action']

İşte bir vaat içeren bir iskelet yöntemi:

MovieLibrary.getGenres = function() {
  var promise = new Promise(function(resolve, reject) {
    /* missing implementation */
  });

  return promise;
};

Söz, türlerde bulunan verileri döndürmek için yapılabilir mi? Spesifikasyon tanımına ulaşmak için daha iyi bir yol var mı?

Çözüm

Görünüşe göre vaatlerin nasıl kullanıldığını anlamıyorsunuz. Bir söz döndürürsünüz. Daha sonra, kodunuz vaadi çözümlediğinde, onu bir sonuçla çözümlüyor ve bu sonuç vaade bağlı .then() işleyicisine aktarılıyor:

MovieLibrary.getGenres = function() {
  var promise = new Promise(function(resolve, reject) {
    /* missing implementation */
    resolve(result);
  });

  return promise;
};

MovieLibrary.getGenres().then(function(result) {
    // you can access the result from the promise here
});
Yorumlar (2)

.then()yerineawait` kullanan sürüm güncellendi.

await, Promise çözümlenene (yani bir değere sahip olana) kadar yürütmeyi durdurur. .then() kullanmanın aksine, vaat döndüren çeşitli fonksiyonları çalıştırırken değerleri awaitlemeye devam edebilirsiniz ve yürütme bir sonraki satırda devam eder (buna 'doğrudan stil denir). Ayrıca JavaScript'in geri kalanıyla tutarlı olduğu için her yerde .then() kullanmaktan çok daha güzeldir.

// Example function that returns a Promise that will resolve after 2 seconds
var getGenres = function() {
  return new Promise(function(resolve) {
    setTimeout(function(){
      resolve(['comedy', 'drama', 'action'])
    }, 2000);
  });
}

// We start an 'async' function to use the 'await' keyword
(async function(){
  var result = await getGenres()
  console.log('Woo done!', result)

  // But the best part is, we can just keep awaiting different stuff, without ugly .then()s
  var somethingElse = await getSomethingElse()
  var moreThings = await getMoreThings()
})()

Await tüm güncel tarayıcılarda ve düğümlerde desteklenmektedir

Yorumlar (1)