Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 发送API调用,观察特定值,如果值更改,则再次调用_Javascript_Typescript_Rxjs - Fatal编程技术网

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
    响应转换为所需的形状即可
只需订阅此observable即可触发执行并接收排放:

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()})),
股份()//