gpt4 book ai didi

javascript - Observable 中的 Async/Await

转载 作者:行者123 更新时间:2023-11-29 15:09:03 25 4
gpt4 key购买 nike

如何在 Observable 中使用 async/await?使用此代码,我无法在可观察范围内触发取消订阅功能,因此不会清除间隔。

const { Observable } = require("rxjs");

const test = () => new Observable(async (subscriber) => {
await Promise.resolve();

const a = setInterval(() => {
subscriber.next(Math.random());
console.log("zz");
}, 500);

return () => {
console.log("asdsad");
clearInterval(a);
};
});

const xyz = test().subscribe(console.log);


setTimeout(() => {
xyz.unsubscribe();
}, 3000);

最佳答案

不支持 observable 中的 Async/Await。但是,它可以通过行为主体和异步嵌套函数来完成。

创建一个行为主体,将其转换为可观察对象(.asObservable()),执行异步嵌套函数,返回可观察对象。这是一个例子。

function getProgress() {

// Change this value with latest details
const value = new BehaviorSubject('10%');
const observable = value.asObservable();

// Create an async function
const observer = async() => {
// Perform all tasks in here
const wait1 = await new Promise(resolve => setTimeout(resolve, 3000));
value.next('66%');

const wait2 = await new Promise(resolve => setTimeout(resolve, 3000));
value.next('100%');

// Complete observable
value.complete();
}

// Call async function & return observable
observer();
return observable;
}

它的可读性很强,而且很有魅力。

关于javascript - Observable 中的 Async/Await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56815704/

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