Sto lavorando a un progetto basato su promesse in Node.js utilizzando bluebird e un altro in promesse native di ES6. In entrambi, ho una catena in cui ho interrogare un database nel seguente formato:La funzione si applica con Promises
some_function(/*...*/)
.then(function() {
return query("SELECT `whatever` FROM `wherever` ")
})
.then(/*...*/)
noti che query
ritorna, ovviamente, una promessa deliberato di risultato della query. Questo si ripete in diverse catene, e sto cercando un modo per ripulire il wrapper della funzione inutilizzato.
mi piacerebbe naturalmente uso Function.prototype.apply()
, ma in questo caso, quando provo:
.then(query.apply(this, ["SELECT * FROM ... "]))
.then(function(rows){ /*...*/ })
La funzione successiva nella catena ottiene rows
come undefined
.
Grazie da domani. Il tuo aiuto è apprezzato.
probabilmente avrete bisogno [Function.prototype.bind()] (https: // developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) invece di applicare: '.then (query.bind (query," SELECT * FROM ... "))'. Puoi usare .bind() per creare una nuova funzione basata su 'query' con la tua stringa SQL [parzialmente applicata] (https://en.wikipedia.org/wiki/Partial_application). –
'apply' * chiama * il metodo (non restituisce una funzione parzialmente applicata), quindi non si passa la funzione di query a' then', ma il valore di ritorno di esso. – doldt
Aspetta, è quel 'return query.apply (" SELECT ... ")' o 'return query (" SELECT ... ")'? Nel primo caso, si ha un metodo '.apply' che * non * è quello' Function.prototype'. Non mescolarli. – Bergi