我有以下辅助功能
private void buildTransportControls() {
ImageButton mBotonPausa = (ImageButton) findViewById(R.id.mostrar_audiolibro_playpause);
mBotonPausa.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MediaControllerCompat mediaControllerCompat = MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this);
int estado = mediaControllerCompat.getPlaybackState().getState();
if(estado == PlaybackStateCompat.STATE_PLAYING){
MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().pause();
}else if (estado == PlaybackStateCompat.STATE_PAUSED){
MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().play();
}else{
Bundle extras = new Bundle();
extras.putString("titulo",MostrarAudiolibroActivity.this.audiolibro.getTitulo());
extras.putString("autor",MostrarAudiolibroActivity.this.audiolibro.getAutor());
MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().playFromUri(Uri.parse(MostrarAudiolibroActivity.this.audiolibro.getLinkAudiolibro()),extras);
Log.d(tag,"Voy a tratar de abrir el audio");
}
}
});
ImageButton mBotonReiniciar = (ImageButton) findViewById(R.id.mostrar_audiolibro_reiniciar);
mBotonReiniciar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().seekTo(0);
//MediaControllerCompat.getMediaController(MostrarAudiolibroActivity.this).getTransportControls().play();
}
});
}
然后我在另一个文件中调用它:
userExist(email) {
this.findUserByEmail(email).then(result => {
return true;
}).catch(error => {
return false;
});
}
但是东西总是未定义的,因为函数是一个promise,我怎么能等待这个值让我的helper函数返回true或false
答案 0 :(得分:2)
在大多数情况下,不能使用Thenable。 Promise是表示异步工作的对象。如果您等待该作业通过等待完成,则所有内容都将被冻结,因为JS通常在单线程环境中运行。
如果要在异步内容的同步编程中重新编写代码,请尝试使用async / await语法。我很喜欢。基本上,它看起来像这样:
async function checkUserExists() {
const exists = await userService.userExists('abc')
console.log('Exists', exists)
}
你需要意识到承诺仍然在引擎盖下使用。 Babel和Typescript现在都支持这种语法,以便与ES5向后兼容。根据Node,它自7.6以来一直支持。
答案 1 :(得分:1)
使用then
方法附加一个将在promise解决后调用的回调:
userService.userExist('abc').then(stuff => {
console.log(stuff);
})