/*
请求依赖并发
描述:发起一个用户登录请求,成功后再发送3个查询请求(资料,邮件,消息),最后将结果合并输出结果。
*/
const loginRequest = new Promise((resolve, reject) => {
setTimeout(function () {
resolve({sessionId:'xxx-xxx-xxx'})
}, 2000);
});
const queryInfoRequest = function (sessionId) {
return new Promise((resolve, reject) => {
setTimeout(function () {
resolve({
id:1,
nickName:'lake'
})
}, 1500)
}
)
};
const queryEmailRequest = function (sessionId) {
return new Promise((resolve, reject) => {
setTimeout(function () {
resolve([
{id:1,title:'hi',content:'I miss you'},
{id:2,title:'are you there',content:'how are you doing'}
])
}, 1000)
}
)
};
const queryMessageRequest = function (sessionId) {
return new Promise((resolve, reject) => {
setTimeout(function () {
resolve([
{id:1,type:'TEXT',content:'I am ok'},
{id:2,type:'TEXT',content:'yeah'}
])
}, 1000)
}
)
};
const oldTime = new Date().getTime();
// 四个接口同时发起请求
combineLatest(from(loginRequest),from(queryInfoRequest('aa')),from(queryEmailRequest('aa')),from(queryMessageRequest('aa'))).subscribe(item => {
console.log("总运行时长:"+(new Date() - oldTime));
console.log(item)
})
// // 结果:
// // [
// // { id: 1, nickName: 'lake' },
// // [{ id: 1, title: 'hi', content: 'I miss you' },{ id: 2, title: 'are you there', content: 'how are you doing' }],
// // [{ id: 1, type: 'TEXT', content: 'I am ok' },{ id: 2, type: 'TEXT', content: 'yeah' }]
// // ]
// // 总运行时长:2003
// 登录接口完成后,再请求另外的三个查询接口
from(loginRequest).pipe(
switchMap(sessionId=>{
return [
from(queryInfoRequest(sessionId)),
from(queryEmailRequest(sessionId)),
from(queryMessageRequest(sessionId))
]}),
combineAll()
).subscribe(item =>{
console.log(item);
console.log("总运行时长:"+(new Date() - oldTime));
})
// // 结果:
// [
// { id: 1, nickName: 'lake' },
// [{ id: 1, title: 'hi', content: 'I miss you' },{ id: 2, title: 'are you there', content: 'how are you doing' }],
// [{ id: 1, type: 'TEXT', content: 'I am ok' },{ id: 2, type: 'TEXT', content: 'yeah' }]
// ]
// 总运行时长:3501