Ответ 1
Итак, я привязал a
.bind
к функции, и она сработала. Это правильный способ сделать это с помощью bluebird?
Да, это один из способов сохранить контекст. Вы также можете передать анонимную функцию (возможно, вы уже знаете это).
Promise.resolve("cherry")
.then(function (value) {
return chair.build(value);
})
.then(console.log);
Или есть лучший способ?
Фактически вы можете использовать метод bluebird Promise.bind
, например
Promise.resolve("cherry")
.bind(chair)
.then(chair.build)
.then(console.log)
Теперь, когда вызываются обработчики Promise (выполняют обработчики или обработчики отклонения), внутри функции this
будет ссылаться только на объект chair
.
Примечание 1: В этом конкретном случае console.log
также получает this
как chair
объект, но он все равно отлично работает, потому что в Node.js, Функция console.log
определяется не только на прототипе bu также на самом объекте, связанном с объектом console
. Соответствующий код здесь.
Примечание 2: Если разные обработчики нуждаются в разных контекстах, лучше писать анонимные функции. В этом случае Promise.bind
не поможет. Но если вы решите использовать его, вам придется использовать разные контексты для каждого из обработчиков, и ваш код может выглядеть примерно так.
var chair1 = new Chair("red")
var chair2 = new Chair("green")
Promise.resolve("cherry")
.bind(chair1) // Changing the binding to `chair1`
.then(chair1.build)
.tap(console.log)
.bind(chair2) // Changing the binding to `chair2`
.then(chair2.build)
.tap(console.log);
суб >