Skip to main content

Cross task execution

A common pattern in compose apps is to trigger tasks from other tasks, this can be done either by creating an http trigger and calling it with fetch(), or by using the callTask() function. Typically you’ll want to use callTask().
  const result = await callTask("my-task", { some: "payload" });

Examples

Call task in a loop

/// <reference types="../../.compose/types.d.ts" /> 

export async function main(
  { logEvent, stage, callTask }: TaskContext,
  _args: any
) {
  const marketsCollection = await stage.collection<MarketData>("markets");
  const unresolvedMarkets = await marketsCollection.findMany({ resolved: false });

  const marketDataPromises = unresolvedMarkets.map(async (market: any) => {
    try {
      const response = await callTask<{ error?: string}>("readMarketData", {
        questionId: market.questionId,
        symbol: SYMBOL,
        startTime: market.startTime,
        endTime: market.endTime,
      });

      return {
        market,
        marketData: response,
      };
    } catch (error) {
      await logEvent({
        code: "PAST_DUE_MARKET_DATA_READ_FAILED",
        message: `Failed to read candle data for market ${market.questionId}: ${error}`,
        data: JSON.stringify({
          questionId: market.questionId,
          error: String(error),
        }),
      });
      return null;
    }
  });

  const marketDataResults = await Promise.all(marketDataPromises);
  
  return {
    marketDataResults,
  };
}

Next Steps