Asynchrone Validierung in Redux-Form für optionales Feld - reactjs - Program QA

Asynchrone Validierung in Redux-Form für optionales Feld

2020-06-30 reactjs redux redux-form

Problem:

Wenn ich kein Versprechen an die asyncValidate-Funktion weitergebe, schlägt dies mit asyncValidation.js:8 Uncaught Error: asyncValidate function passed to reduxForm must return a promise fehl asyncValidation.js:8 Uncaught Error: asyncValidate function passed to reduxForm must return a promise auch wie ich auf Requisiten zugreifen kann, die an die Komponente in der asyncValidat Funktion übergeben wurden fehlgeschlagenes Validierungsbild .

Mein Fall:

Das Formular enthält Optionen zum Auswählen einer festen URL. Wenn Sie eine benutzerdefinierte URL eingeben möchten, können Sie das Kontrollkästchen Benutzerdefiniert aktivieren und die URL in das Textfeld eingeben. Ich muss die eingegebene benutzerdefinierte URL überprüfen.

Dieses Feld hat nur dann einen Wert, wenn der Benutzer die benutzerdefinierte URL eingibt. Es funktioniert gut, wenn Sie einen Wert in mein benutzerdefiniertes URL-Textfeld senden. Die Übermittlung schlägt mit einem oben genannten Fehler fehl, wenn ich keinen Wert an das Feld sende

Code für den asynchronen Validator:

const asyncValidate = values => {
  const { custom_url } = values;
  const noFeedError = { custom_url: "No feeds found" };
  const fetchFailedError = { custom_url: "Fetch failed, try again" };

  if (custom_url && custom_url !== "") {
    return fetchOnlineFeeds(custom_url) //fetches if URL is valid fails with 503 
      .then(feedResult => {
        if (feedResult.error) {
          throw noFeedError;
        }
      })
      .catch(() => {
        throw fetchFailedError;
      });
  }
};

gesucht und gefunden:

aber anscheinend funktioniert nichts und wenn wir ein versprechen auf andere zurückgeben müssen, was ist der beste weg

Answers

Problem Ich denke ist, dass Sie undefiniert außerhalb des if zurückkehren, versuchen Sie zu refaktorieren, um ein Versprechen so oder so zurückzugeben

Promise.resolve() einfach Promise.resolve() nach Ihrem if zurück. Sie könnten auch ein return new Promise()

const asyncValidate = values => {
  const { custom_url } = values;
  const noFeedError = { custom_url: "No feeds found" };
  const fetchFailedError = { custom_url: "Fetch failed, try again" };

  if (custom_url && custom_url !== "") {
    return fetchOnlineFeeds(custom_url) //fetches if URL is valid fails with 503 
      .then(feedResult => {
        if (feedResult.error) {
          throw noFeedError;
        }
      })
      .catch(() => {
        throw fetchFailedError;
      });
  }
  return Promise.resolve();
};

Related