如何使一个JavaScript承诺返回一个承诺以外的东西?

我有一份来自客户的规范,要求在一个模块中实现一个方法。

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

如果给定一个流派的数组。

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

这里是一个带有承诺的骨架方法。

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

  return promise;
};

能否使承诺返回在基因中找到的数据?是否有更好的方法来实现规范描述?

解决办法

听起来你好像没有理解承诺是如何使用的。 你返回一个承诺。 然后,以后当你的代码解析这个承诺时,它会用一个结果来解析它,这个结果被传递给连接到承诺的.then()处理器。

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
});
评论(2)

更新了使用await'而不是.then()'的版本。

await停止执行,直到Promise被解决(即有一个值)。与使用.then()不同的是,当你运行各种返回承诺的函数时,你可以继续await取值,并继续执行到下一行(这被称为'直接风格)。这也是***好看的,因为它与JavaScript的其他部分一致,而不是到处都是`.then()'。

// 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

评论(1)