递归函数、Promise和Rxjs三种异步获取文件的方法(简单举例,帮助新手理解)

原创
小哥 3年前 (2022-11-14) 阅读数 6 #大杂烩

这三种方法的简单示例, 帮助理解

// 第一种: 回调函数异步数据采集。
function getCallbackData(callback) {
  let username = "abc";
  setTimeout(() => {
    callback(username);
  }, 1000);
}

// 第二种: Promise异步数据采集
function getPromiseData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      let username = "PromiseData";
      resolve(username);
    }, 3000);
  });
}

//第三种: Rxjs, 写法和Promise很像, 但是要比Promise强大一些
// HINT: 这个Rxjs 在第三方库中。Angular该框架已经集成。
function rxjsData() {
    return new Observable ((observed) => {
        setTimeout(() => {
            let username = observable name;
            observed.next(username);
        }, 2000);
    });
}

// 调用回调函数
function main() {
  let name = getCallbackData((data) => {
    console.log(通过回调函数获得的值为: ${data});
  });
  console.log(name);
}

// Promise的调用
function main1() {
  let name = getPromiseData().then((data) => {
    console.log(通过Promise获得的值为: ${data});
  });
}

// Rxjs
function main2(){
    let name = rxjsData().subscribe(value => console.log(value));
}

main();

main1();

main2();

拓展:

比较一下Rxjs和Promise的区别

一、在Rxjs可以取消中的订阅, 就比如:

let message = this.bookService.getBookData().subscribe(data => console.log(data));
message.unsubscribe();

这样,订阅中的内容将不会被执行。

二、setInterval方法
setInterval方法在Promise只能首次运行, 而在Rxjs它可以在正常循环中执行。

Rxjs订阅的数据处理:

let streamData = this.bookService.getBookdData();
streamData.pipe(
  map(value => value * value)
  ,
  filter(value => value % 2 === 0)
  }
  .subscribe(data => console.log(data));
)
版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除