Я работаю над проектом на основе обещаний в Node.js, используя bluebird, а другой - в национальных обещаниях ES6. В обоих случаях, у меня есть цепь, где я запросить базу данных в следующем виде:Функция применяется с Promises
some_function(/*...*/)
.then(function() {
return query("SELECT `whatever` FROM `wherever` ")
})
.then(/*...*/)
Обратите внимание, что query
явно возвращает обещание разрешенное к результату запроса. Это повторяется в нескольких цепочках, и я ищу способ очистить неиспользуемую оболочку функции.
я естественно использовать Function.prototype.apply()
, но в этом случае, когда я пытаюсь:
.then(query.apply(this, ["SELECT * FROM ... "]))
.then(function(rows){ /*...*/ })
Следующая функция в цепочке получает rows
как undefined
.
Спасибо заранее. Ваша помощь приветствуется.
Вы, наверное, хотите [Function.prototype.bind()] (https: // developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) вместо применения: '.then (query.bind (query, SELECT * FROM ...")) '. Вы можете использовать .bind() для создания новой функции на основе 'query' со своей строкой SQL [частично примененной] (https://en.wikipedia.org/wiki/Partial_application). –
'apply' * вызывает * метод (он не возвращает частично примененную функцию), поэтому вы не передаете функцию запроса' then', а возвращаемое значение. – doldt
Подождите, это 'return query.apply (" SELECT ... ")' или 'return query (" SELECT ... ")'? В первом случае у вас есть метод '.apply', который не является * функцией' Function.prototype'. Не смешивайте их. – Bergi