Tenho uma especificação de um cliente para uma implementação de um método num módulo:
// getGenres():
// Returns a promise. When it resolves, it returns an array.
Se for dado um conjunto de géneros,
['comedy', 'drama', 'action']
Aqui está um método de esqueleto com uma promessa:
MovieLibrary.getGenres = function() {
var promise = new Promise(function(resolve, reject) {
/* missing implementation */
});
return promise;
};
Pode ser feita a promessa de devolver os dados encontrados nos géneros? Haverá melhor forma de conseguir a descrição espectral?
Parece que está a't a compreender como as promessas são usadas. Devolve-se uma promessa. Depois, mais tarde, quando o seu código resolve a promessa, ele resolve-a com um resultado e esse resultado é passado para o "então()`manipulador ligado à promessa:
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
});
Versão actualizada utilizando await
em vez de .then()
.
O 'await' deixa de executar até que a Promessa tenha resolvido (ou seja, tenha um valor). Ao contrário de utilizar .then()
pode simplesmente manter os valores await' à medida que executa várias funções que devolvem promessas, e a execução continua na linha seguinte (isto chama-se ' estilo directo). It's também **much** mais bonito de se ver , uma vez que it's é consistente com o resto do JavaScript, do que
.then()` em todo o lado.
// 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()
})()