Javascript 发送API调用,观察特定值,如果值更改,则再次调用
我有一个函数,可以调用客户端并返回数据:Javascript 发送API调用,观察特定值,如果值更改,则再次调用,javascript,typescript,rxjs,Javascript,Typescript,Rxjs,我有一个函数,可以调用客户端并返回数据: const remoteConnection = await this.client.connectionStatus(chassi, number, language) || []; return { data: remoteConnection as RemoteInfo, read: new Date() }; 答复将采用以下形式: {
const remoteConnection = await
this.client.connectionStatus(chassi, number, language) || [];
return {
data: remoteConnection as RemoteInfo,
read: new Date()
};
答复将采用以下形式:
{
connectionStatus: "",
online: ""
}
connectionStatus可以有三种状态:
'disconnected'
'pending'
'connected'
我想调用我的API并发送数据。如果“connectionStatus”为“pending”,我想每隔5秒调用一次API,检查它是否变为“connected”。在这种情况下,我想用新值再次返回数据
简言之:
进行API调用并返回数据。
如果返回数据中的“connectionStatus”等于“pending”,则每隔5秒进行一次新呼叫,检查“connectionStatus”是否等于“connected”。如果为true,则再次返回数据
如何操作?演示如何每5秒运行一次函数:
var intervalId=window.setInterval(函数(){
///在这里调用你的函数
}, 5000);
在本例中,您将在connectionStatus=pending时运行此函数
var intervalId = window.setInterval(function() {
if (connectionStatus != pending) {
clearInterval(intervalId); // stop the loop
return data;
}
}, 5000);
演示如何每5秒运行一次函数:
var intervalId=window.setInterval(函数(){
///在这里调用你的函数
}, 5000);
在本例中,您将在connectionStatus=pending时运行此函数
var intervalId = window.setInterval(function() {
if (connectionStatus != pending) {
clearInterval(intervalId); // stop the loop
return data;
}
}, 5000);
您可以使用
timer
触发api调用,并使用takeUntil
在状态满足您的条件时停止:
const data$=计时器(0,5000)。管道(
concatMap(()=>client.connectionStatus()),
takeWhile(resp=>resp.connectionStatus=='pending',true),
映射(数据=>({data,读取:new Date()}))
);
以下是流程:
- 立即发射,然后每5秒发射一次
- 调用您的方法并发出承诺的结果
- 使流在满足条件时完成
- 只需将
响应转换为所需的形状即可RemoteInfo
data$.subscribe();
这是一个样品
如果observable将有多个订阅服务器,您可能希望通过利用操作符防止对api的多个单独调用,这将导致所有订阅服务器共享同一订阅:
const data$=计时器(0,5000)。管道(
concatMap(()=>client.connectionStatus()),
takeWhile(resp=>resp.connectionStatus=='pending',true),
映射(数据=>({data,读取:new Date()})),
share()//您可以使用定时器
触发api调用,并使用takeUntil
在状态满足您的条件时停止:
const data$=计时器(0,5000)。管道(
concatMap(()=>client.connectionStatus()),
takeWhile(resp=>resp.connectionStatus=='pending',true),
映射(数据=>({data,读取:new Date()}))
);
以下是流程:
- 立即发射,然后每5秒发射一次
- 调用您的方法并发出承诺的结果
- 使流在满足条件时完成
- 只需将
RemoteInfo
响应转换为所需的形状即可
只需订阅此observable即可触发执行并接收排放:
data$.subscribe();
这是一个样品
如果observable将有多个订阅服务器,您可能希望通过利用操作符防止对api的多个单独调用,这将导致所有订阅服务器共享同一订阅:
const data$=计时器(0,5000)。管道(
concatMap(()=>client.connectionStatus()),
takeWhile(resp=>resp.connectionStatus=='pending',true),
映射(数据=>({data,读取:new Date()})),
股份()//