Wenn Sie ein Versprechen in einer Funktion definieren und es woanders verwenden möchten, müssen Sie zunächst das Versprechen aus der Funktion zurückgeben, die Sie in Ihrem Code nicht machen. Dann müssen Sie diese Funktion tatsächlich aufrufen, die Sie auch nicht tun. Und schließlich müssen Sie einen then
Callback auf den zurückgegebenen Wert verwenden, was Sie auch in diesem Fall nicht tun.
Es hat keinen Sinn, das Versprechen in einer lokalen Variablen promiseFriend
zu speichern, die auf diese Funktion beschränkt ist. Es gibt auch keinen Grund, einen Wert in Ihrem then
Rückruf zurückgeben: .then(function (friends) { return friends; })
- Ich habe keine Ahnung, was hier versucht haben.
Ich nehme an, dass findFriends
ein Route-Handler für Express sein soll. Wenn ja, stellen Sie sicher, dass Sie in jedem Fall eine Antwort senden (was Sie nicht für friends.length===0
tun). Außerdem müssen Sie dem gespeicherten Versprechen tatsächlich einen then
-Handler hinzufügen, wenn Sie nach der Lösung handeln möchten. Im Moment haben Sie nicht einmal friends
in Ihrer Funktion definiert. Fügen Sie auch einen catch
Handler hinzu und senden Sie auch eine Antwort für diesen Fall.
Dann könnten Sie das Versprechen von Ihrer Funktion zurückgeben, aber nicht, wenn es eine Route-Handler ist, macht es keinen Sinn. Sie können ein Versprechen aus einer Funktion zurückgeben:
function x() {
return MyFriendes.find({}).exec();
}
und dann verwenden:
x().then(friends => ...).catch(error => ...);
aber man kann nicht Rückgabewerte verwenden, wenn Sie es nicht zurückkehren, können Sie keine undefinierten Variablen verwenden, wie wenn sie definiert wurden, und Sie müssen tatsächlich überlegen, an wen der Rückgabewert zurückgegeben wird.
Ich schlage vor, dass Sie lernen, wie Knoten tatsächlich funktioniert, weil es scheint, dass Sie einige zufällige Code kopiert und eingefügt haben, zusammengefügt und erwarten, dass es tut, was Sie wollen, ohne tatsächlich zu versuchen, es zu verstehen.
Um ein besseres Verständnis über die asynchrone Natur von Knoten zu erhalten, die hier diese Ausführungsreihenfolge wird zu geben, finden Sie die Antworten:
Versuchen Sie nicht, Node prog zu schreiben Rams, bevor Sie das Konzept der Funktionsaufrufe, Rückgabewerte, Rückrufe und in diesem Fall Versprechungen verstehen.
Könnten Sie mehr Code posten? Wo nennst du 'findFriends' und wo nennst du das Versprechen genau? Eine Sache, die ich Ihnen über die Versprechungen sagen könnte - solange Sie nicht "then" irgendwo in Ihrem Code nennen, Versprechen wird nicht gelöst werden. Und nach der Auflösung können Sie das selbe 'then' so oft wie gewünscht aufrufen und es werden die gleichen Werte (bereits aufgelöst) zurückgegeben. provideFriend ist undefiniert hat nichts mit Versprechen - es bedeutet nur, dass an der Stelle, wo Sie das Versprechen nennen diese Variable nicht definiert ist. – SzybkiSasza