#Why is the saveToDB function executing before the getImage function promise is completed

9 messages · Page 1 of 1 (latest)

terse bloom
#

How can I make sure the saveToDB function executes after the getImage function, given that getImage does long polling?

GET IMAGE FUNCTION

export const getImage = async (
  messageId: string,
  setProgress: (newProgressValue: number) => void,
  setImageURL: (newImageURL: string) => void,
  setMultiImageURL: (newMultiImageURL: string[]) => void,
  setMessageID: (newMessageID: string) => void,
  setMessageBtnID: (newMessageBtnID: string) => void
) => {
  // if messageId is undefined then just return
  if (!messageId) {
    return;
  }

  const response = await fetch(`api-url`);
  const data = await response.json();
  const { progress: innerProgress, response: getImageResponse } = data;

  if (innerProgress === 0) {
    setProgress(9);
  } else {
    setProgress(innerProgress as number);
  }

  if (innerProgress === 100) {
    setImageURL(getImageResponse.imageUrl);
    setMultiImageURL(getImageResponse.imageUrls);
    setMessageID(getImageResponse.originatingMessageId);
    setMessageBtnID(getImageResponse.buttonMessageId);
    return getImageResponse;
  } else {
    setTimeout(
      async () =>
        await getImage(
          messageId,
          setProgress,
          setImageURL,
          setMultiImageURL,
          setMessageID,
          setMessageBtnID
        ),
      5000
    );
  }
};

MAIN CODE


const getImageResponse = await getImage(
      messageId,
      setProgress,
      setImageURL,
      setMultiImageURL,
      setMessageID,
      setMessageBtnID
    );
    await saveToDB(
      getImageResponse!.imageUrl,
      getImageResponse!.imageUrls,
      getImageResponse!.originatingMessageId,
      getImageResponse!.buttonMessageId
    );

wispy kestrelBOT
#

🔎 This post has been indexed in our web forum and will be seen by search engines so other users can find it outside Discord

🕵️ Your user profile is private by default and won't be visible to users outside Discord, if you want to be visible in the web forum you can add the "Public Profile" role in id:customize

✅ You can mark a message as the answer for your post with Right click -> Apps -> Mark Solution
(if you don't see the option, try refreshing Discord with Ctrl + R)

wild coral
terse bloom
wild coral
#
  await new Promise(resolve => setTimeout(resolve, 5000))
terse bloom
wild coral
#

oh ok try this

export const getImage = async (
  messageId: string,
  setProgress: (newProgressValue: number) => void,
  setImageURL: (newImageURL: string) => void,
  setMultiImageURL: (newMultiImageURL: string[]) => void,
  setMessageID: (newMessageID: string) => void,
  setMessageBtnID: (newMessageBtnID: string) => void,
) => {
  // if messageId is undefined then just return
  if (!messageId) {
    return;
  }

  while (true) {
    const response = await fetch(`api-url`);
    const data = await response.json();
    const { progress, response: getImageResponse } = data;

    if (progress >= 100) {
      setImageURL(getImageResponse.imageUrl);
      setMultiImageURL(getImageResponse.imageUrls);
      setMessageID(getImageResponse.originatingMessageId);
      setMessageBtnID(getImageResponse.buttonMessageId);
      return getImageResponse;
    }

    setProgress((progress || 9) as number);
  }
};
wild coral
#

@terse bloom does the code work?

terse bloom
#

yes it works thanks!