- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用代码示例解释了我的问题
我有以下服务:
@Injectable()
export class PartidoProvider extends MyFirestoreProvider<Partido> {
constructor( public http: HttpClient,
public firestore: AngularFirestore) {
super('partidos', http, firestore);
}
buscarPartido ( jugador1: Jugador, jugador2: Jugador ) : Observable<Partido[]> {
let partidoGanaJugador1: Partido = new Partido();
let partidoPierdeJugador1: Partido = new Partido();
partidoGanaJugador1.jugadorGanador = jugador1.idDoc;
partidoGanaJugador1.jugadorPerdedor = jugador2.idDoc;
partidoPierdeJugador1.jugadorGanador = jugador2.idDoc;
partidoPierdeJugador1.jugadorPerdedor = jugador1.idDoc;
return Observable.zip( this.get(partidoGanaJugador1),
this.get(partidoPierdeJugador1),
(listaGanados, listaPerdidos) => {
return listaGanados.concat(listaPerdidos);
});
}
我需要从一个组件调用转换为 promise 的服务,以便稍后使用 await 等待数据返回,以便管理在另一个实体中的注册。
接下来我将展示调用服务的测试代码:
async enviarResultado(){
let rival: Jugador;
let jugador: Jugador = this.authProvider.jugador;
let nombreRival: string;
let partido: Partido;
// Obtener partido del calendario para añadirle el resultado
nombreRival = this.myForm.controls['rival'].value;
rival = this.rivales.find( rival => rival.nombre == nombreRival);
// THIS WORKS
const sample = val => Observable.of(val).delay(5000);
const example = sample('First Example').toPromise().then(result => {
console.log('From Promise:', result);
});
// THIS WORKS
this.partidoProvider.buscarPartido(jugador, rival).subscribe(
resultado => {
console.log("El subscribe ha devuelto datos");
console.log(resultado);
},
error => {
console.error("Se ha producido un error al intentar buscar el partido para modificar el resultado")
}
);
// THIS DOESN'T WORK only 1 appears in the debug console (console.log ("1"))
console.log("1");
this.partidoProvider.buscarPartido(jugador, rival).toPromise()
.then( lista => {
console.log("2");
console.log("Promesa entra");
console.log("data:" + lista);
if ( lista && lista.length > 0){
partido = lista[0]
}
})
.catch( error => {
console.log("2");
console.error("Se ha producido un error al intentar buscar el partido para modificar el resultado")
});
有没有人知道哪里出了问题?
非常感谢您
最佳答案
当使用 toPromise()
时,您需要确保源 Observables 完成。
Observables 可以发出多个值,因此 toPromise()
无法知道最后一个值是什么以及何时应该解析它返回的 Promise。
所以我的猜测是使用 this.get(...)
创建的源 Observables 之一永远不会完成。也许您想使用类似这样的东西 Observable.zip(...).take(1)
。
关于javascript - 为什么 'toPromise()' 对我不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51707844/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!