Eu tenho um código javascript como este:
function justTesting() {
promise.then(function(output) {
return output + 1;
});
}
var test = justTesting();
Sempre tenho um valor indefinido para o teste var. Acho que é porque as promessas ainda não foram resolvidas ... há como devolver o valor de uma promessa?
javascript
promise
Priscy
fonte
fonte
then()
chamada é novamente uma promessa, que envolve o valor que você retornou.promise
. Você não o mostra definido em nenhum lugar e não retorna nada de suajustTesting()
função. Se quiser uma ajuda melhor, você precisa descrever o problema que está tentando resolver, em vez de apenas nos mostrar um código tão "errado" que nem mesmo ilustra o que você está realmente tentando fazer. Explique o problema que você está tentando resolver.Respostas:
Quando você retorna algo de um
then()
retorno de chamada, é um pouco mágico. Se você retornar um valor, o próximothen()
será chamado com esse valor. No entanto, se você retornar algo semelhante a uma promessa, o próximothen()
espera por isso e só é chamado quando a promessa é estabelecida (sucesso / falha).Fonte: https://developers.google.com/web/fundamentals/getting-started/primers/promises#queuing-asynchronous-actions
fonte
Para usar uma promessa, você deve chamar uma função que cria uma promessa ou você mesmo deve criar uma. Você realmente não descreve o problema que está tentando resolver, mas veja como você mesmo criaria uma promessa:
Ou, se você já tem uma função que retorna uma promessa, pode usar essa função e retornar sua promessa:
fonte
return
, ou seja,justTesting
dizreturn.then => return
. Eu sei que isso funciona bcs Eu implementei isso (bcs linting me forçou a, longenew Promise
), mas você pode explicar como entender / pensar nesse par retorno / retorno?.then()
é uma função separada da função que o contém, portanto, quando é chamada, tem seu próprio valor de retorno. Em segundo lugar, o valor de retorno de um.then()
manipulador se torna o valor resolvido da promessa. Portanto,.then(val => {return 2*val;})
está alterando o valor resolvido deval
para2*val
.O que fiz aqui é retornar uma promessa da função justTesting. Você pode obter o resultado quando a função for resolvida.
Espero que isto ajude!
fonte
Eu prefiro usar o comando "await" e funções assíncronas para me livrar de confusões de promessas,
Neste caso, eu escreveria uma função assíncrona primeiro; ela será usada em vez da função anônima chamada em "promessa. Então" parte desta pergunta:
e então eu chamaria esta função da função principal:
Observando que retornei a função principal e a subfunção para funções assíncronas aqui.
fonte