Heim >Web-Frontend >js-Tutorial >Warum gibt meine asynchrone Funktion „Promise { }' anstelle eines Werts zurück?

Warum gibt meine asynchrone Funktion „Promise { }' anstelle eines Werts zurück?

Barbara Streisand
Barbara StreisandOriginal
2024-12-13 06:07:17839Durchsuche

Why Does My Asynchronous Function Return `Promise {  }` Instead of a Value?

Asynchrone Funktion, die Versprechen zurückgibt { } Anstelle eines Werts

Wie im bereitgestellten Code gezeigt, geben asynchrone Funktionen häufig ein Promise zurück, das den letztendlich verfügbaren Wert darstellt. Wenn jedoch versucht wird, sofort auf seinen Wert zuzugreifen, protokolliert die Konsole „Promise { }“ aufgrund des ungelösten Status des Promise.

Promise-Werte werden aufgelöst

Um den gewünschten Tokenwert zu erhalten, müssen Sie einen „.then“-Handler mit Ihrem Versprechen verketten. Dieser Handler erfasst das gelöste Ergebnis, unabhängig davon, ob es bereits verfügbar ist oder noch aussteht:

let AuthUser = (data) => {
  return google.login(data.username, data.password).then((token) => {
    return token;
  });
};

let userToken = AuthUser(data);
userToken.then((result) => {
  console.log(result); // "Some User Token"
});

Promise Resolution Details

Promises entsprechen der Promises/A-Spezifikation, die vorschreibt ein bestimmtes Auflösungsverfahren:

  • Wenn der „.then“-Handler einen Wert zurückgibt, wird das Versprechen aufgelöst auf diesen Wert.
  • Wenn der Handler ein weiteres Promise zurückgibt, wird das Promise in den aufgelösten Wert des verketteten Promise aufgelöst.

Verstehen der Promise-Verkettung

Der aufgelöste Wert jedes „.then“-Handlers wird zur Eingabe des nächsten Handlers und ermöglicht so eine Kette asynchroner Vorgänge. Die folgenden Beispiele veranschaulichen dieses Verhalten:

Value Return:

function initPromise() {
  return new Promise((res, rej) => {
    res("initResolve");
  });
}

initPromise()
  .then((result) => {
    console.log(result); // "initResolve"
    return "normalReturn";
  })
  .then((result) => {
    console.log(result); // "normalReturn"
  });

Chained Promise Return:

function initPromise() {
  return new Promise((res, rej) => {
    res("initResolve");
  });
}

initPromise()
  .then((result) => {
    console.log(result); // "initResolve"
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("secondPromise");
      }, 1000);
    });
  })
  .then((result) => {
    console.log(result); // "secondPromise"
  });

Das obige ist der detaillierte Inhalt vonWarum gibt meine asynchrone Funktion „Promise { }' anstelle eines Werts zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn