我有一份来自客户的规范,要求在一个模块中实现一个方法。
// 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
});
更新了使用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()
})()