angular异步处理
let info = [ '北京', '上海', '香港', '日本', '纽约', '韩国'];
// 方案一 递归完成所有的数据遍历计算,且保证了执行的顺序
let milkCount = 0;
let finish = new Subject<any>();
function computeMilk (i) {
if ( i<2 ) {
// 同步
milkCount = milkCount + 1;
if (i < info.length - 1){
computeMilk(i+1);
} else { // 结束后返回一个标志
return { milkCount: milkCount};;
}
} else {
// 异步
setTimeout(() => {
milkCount = milkCount + i;
if (i < info.length - 1){
computeMilk(i+1);
} else {
finish.next('finish');
}
}, 1000);
}
}
const result = computeMilk(0);
if(typeof (result) === "object" && result.milkCount) { // 同步执行完毕
} else { // 异步执行完毕
result.subscribe(result => {
});
}
// 方案二 循环完成所有的数据遍历计算,结束后执行回调函数
function search(cb){
let milkCount = 0;
let j = 0;
for (var i = 0; i< info.length; i++) {
if ( i<2 ) {
// 同步
milkCount = milkCount + 1;
j = j + 1;
if (j === info.length ){ // 所有的都循环完毕
cb(milkCount)
}
} else {
// 异步
setTimeout(() => {
milkCount = milkCount + i;
j = j + 1;
if (j === info.length ){ // 所有的都循环完毕
// return milkCount;
cb(milkCount)
}
}, 1000);
}
}
return 0;
}
function callback(e) {
console.log(e)
}