gpt4 book ai didi

javascript - 在两个单独的成功 http 请求后触发回调

转载 作者:太空狗 更新时间:2023-10-29 17:50:52 30 4
gpt4 key购买 nike

我的应用程序的根组件在 init 上调用我的服务中的两个异步函数来获取数据。我想知道如何在它们都完成后调用一个函数。我正在使用 angular 2.0.0-alpha.44 和 typescript 1.7.3

import {Component, OnInit} from 'angular2/angular2';

import {ServiceA} from './services/A';
import {ServiceB} from './services/B';


@Component({
selector: 'app',
template: `<h1>Hello</h1>`
})
export class App {
constructor(
public serviceA: ServiceA,
public serviceB: ServiceB
) { }

onInit() {

// How to run a callback, after
// both getDataA and getDataB are completed?
// I am looing for something similar to jQuery $.when()
this.serviceA.getDataA();
this.serviceB.getDataB();
}
}

serviceA.getDataAserviceA.getDataB 是简单的 http get 函数:

// Part of serviceA
getDataA() {
this.http.get('./some/data.json')
.map(res => res.json())
.subscribe(
data => {
// save res to variable
this.data = data;
},
error => console.log(error),
// The callback here will run after only one
// function is completed. Not what I am looking for.
() => console.log('Completed')
);
}

最佳答案

一个简单的并行解决方案是这样的:

let serviceStatus = { aDone: false, bDone: false };

let getDataA = (callback: () => void) => {
// do whatver..
callback();
}

let getDataB = (callback: () => void) => {
// do whatver..
callback();
}

let bothDone = () => { console.log("A and B are done!");

let checkServiceStatus = () => {

if ((serviceStatus.aDone && serviceStatus.bDone) == true)
bothDone();
}

getDataA(() => {
serviceStatus.aDone = true;
checkServiceStatus();
});

getDataA(() => {
serviceStatus.bDone = true;
checkServiceStatus();
});

我个人使用RxJS让我摆脱这种棘手的情况,可能值得一看。

编辑:

鉴于实际使用 RxJS 的反馈:

let observable1: Rx.Observable<something>;
let observable2: Rx.Observable<something>;

let combinedObservable = Rx.Observable
.zip(
observable1.take(1),
observable2.take(1),
(result1, result2) => {
// you can return whatever you want here
return { result1, result2 };
});

combinedObservable
.subscribe(combinedResult => {
// here both observable1 and observable2 will be done.
});

此示例将并行运行两个可观察对象,并在它们都完成后将结果合并为一个结果。

关于javascript - 在两个单独的成功 http 请求后触发回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34051605/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com