Ich arbeite an einem Versprechen-Projekt in Node.js mit bluebird, und ein anderes in native Versprechen von ES6. In den beiden habe ich eine Kette, wo ich eine Datenbank in das folgende Formular abfragen:Funktion gelten mit Promises
some_function(/*...*/)
.then(function() {
return query("SELECT `whatever` FROM `wherever` ")
})
.then(/*...*/)
Beachten Sie, dass query
offensichtlich ein Versprechen an das Abfrageergebnis aufgelöst zurückgibt. Dies wiederholt sich in mehreren Ketten, und ich suche nach einer Möglichkeit, den unbenutzten Funktions-Wrapper aufzuräumen.
ich Function.prototype.apply()
natürlich verwenden würde, aber in diesem Fall, wenn ich versuche:
.then(query.apply(this, ["SELECT * FROM ... "]))
.then(function(rows){ /*...*/ })
Die nächste Funktion in der Kette wird rows
als undefined
.
Danke von voraus. Deine Hilfe wird geschätzt.
Sie wollen wahrscheinlich [Function.prototype.bind()] (https: // developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) anstelle von apply: '.then (query.bind (query," SELECT * FROM ... "))'. Sie können .bind() verwenden, um eine neue Funktion basierend auf 'query' mit Ihrer SQL-Zeichenfolge [partially applied] (https://en.wikipedia.org/wiki/Partial_application) zu erstellen. –
'apply' * ruft * die Methode auf (sie gibt keine teilweise angewendete Funktion zurück), also übergibt man die Abfragefunktion nicht an' then', sondern den Rückgabewert davon. – doldt
Warte, ist das 'zurück query.apply (" SELECT ... ")' oder 'return query (" SELECT ... ")'? Im ersten Fall haben Sie eine '.apply' Methode, die * nicht * der' Function.prototype' ist. Verwechsle sie nicht. – Bergi