[Compose] Asynchronous Reactive Data with Promises
Let’s make using the observers asynchronous! This way we can update the data and have multiple observers run asynchronously.
class AsyncData {
constructor(initialData) {
this.data = initialData;
this.subscribers = [];
}
// Subscribe to changes in the data
subscribe(callback) {
if (typeof callback !== 'function') {
throw new Error('Callback must be a function');
}
this.subscribers.push(callback);
}
// Update the data and wait for all updates to complete
async set(key, value) {
this.data[key] = value;
// Call the subscribed function and wait for it to resolve
const updates = this.subscribers.map(async (callback) => {
await callback(key, value);
});
await Promise.allSettled(updates);
}
}
Let’s say we want to wait until all subscriptions to our asynchronous reactive data are processed:
const data = new AsyncData({ pizza: 'Pepperoni' });
data.subscribe(async (key, value) => {
await new Promise(resolve => setTimeout(resolve, 500));
console.log(`Updated UI for ${key}: ${value}`);
});
data.subscribe(async (key, value) => {
await new Promise(resolve => setTimeout(resolve, 1000));
console.log(`Logged change for ${key}: ${value}`);
});
// function to update data and wait for all updates to complete
async function updateData() {
await data.set('pizza', 'Supreme'); // This will call the subscribed functions and wait for their promises to resolve
console.log('All updates complete.');
}
updateData();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2022-10-04 [Typescript] Tips: Create your own 'objectKeys' function using generics and the 'keyof' operator
2022-10-04 [Typescript + React] Tips: Write your own 'PropsFrom' helper to extract props from any React component
2021-10-04 [Cloud Architect] 9. Securing Access to Cloud Services
2020-10-04 [Typescript] User defined type guards
2020-10-04 [TypeScript] instanceof and Type Guards (getPrototypeOf)
2019-10-04 [Angular] How to show global loading spinner for application between page navigation
2019-10-04 [NgRx] NgRx Data Fetching Solution - How to Load Data Only If Needed