Attendi utilizzando il polling

La sospensione dell'esecuzione di un flusso di lavoro consente di eseguire il polling di un servizio esterno o di attendere il completamento di un'operazione a lunga esecuzione. La sys.sleep funzione della libreria standard sospende l'esecuzione per un numero specificato di secondi, fino a un massimo di 31536000 (un anno).

Mettere in pausa un workflow

Puoi sospendere l'esecuzione di un workflow aggiungendo un passaggio di sospensione alla definizione del workflow. Questo passaggio include una chiamata a sys.sleep e specifica in secondi per quanto tempo vuoi mettere in pausa il flusso di lavoro:

YAML

  - STEP_NAME:
      call: sys.sleep
      args:
          seconds: SLEEP_IN_SECONDS
    

JSON

    [
      {
        "STEP_NAME": {
          "call": "sys.sleep",
          "args": {
            "seconds": "SLEEP_IN_SECONDS"
          }
        }
      }
    ]
    

Eseguire il polling dei dati

Puoi anche utilizzare sys.sleep per eseguire il polling dei dati in un determinato intervallo. Ad esempio, potresti voler eseguire il polling di un'API finché non viene soddisfatta una condizione specifica:

YAML

  main:
      params: [jobId]
      steps:
        - checkJob:
            call: http.get
            args:
                url: ${"https://example.com/jobs/" + jobId}
                auth:
                    type: OAuth2
            result: jobStatus
        - checkIfDone:
            switch:
              - condition: ${jobStatus.complete}
                return: ${jobStatus}
        - wait:
            call: sys.sleep
            args:
                seconds: 60
            next: checkJob
    

JSON

  {
    "main": {
      "params": [
        "jobId"
      ],
      "steps": [
        {
          "checkJob": {
            "call": "http.get",
            "args": {
              "url": "${\"https://example.com/jobs/\" + jobId}",
              "auth": {
                "type": "OAuth2"
              }
            },
            "result": "jobStatus"
          }
        },
        {
          "checkIfDone": {
            "switch": [
              {
                "condition": "${jobStatus.complete}",
                "return": "${jobStatus}"
              }
            ]
          }
        },
        {
          "wait": {
            "call": "sys.sleep",
            "args": {
              "seconds": 60
            },
            "next": "checkJob"
          }
        }
      ]
    }
  }