admin管理员组文章数量:1323714
Is there any reason why the promise below is only firing once?
console.log('start')
var Promise = require('bluebird')
var onoff = require('onoff')
var Gpio = onoff.Gpio
var button = new Gpio(4, 'in', 'both')
var buttonWatchAsync = function (button, desiredValue) {
return new Promise (function (resolve, reject) {
return button.watch(function(err, value) {
if (err) return reject(err)
if (typeof desiredValue === 'undefined') return resolve(value)
if (desiredValue === value) return resolve()
})
})
}
buttonWatchAsync(button)
.then(function (value) {
console.log('fired promise')
console.log(value)
})
.catch(function (err) {
throw err
})
Is there any reason why the promise below is only firing once?
console.log('start')
var Promise = require('bluebird')
var onoff = require('onoff')
var Gpio = onoff.Gpio
var button = new Gpio(4, 'in', 'both')
var buttonWatchAsync = function (button, desiredValue) {
return new Promise (function (resolve, reject) {
return button.watch(function(err, value) {
if (err) return reject(err)
if (typeof desiredValue === 'undefined') return resolve(value)
if (desiredValue === value) return resolve()
})
})
}
buttonWatchAsync(button)
.then(function (value) {
console.log('fired promise')
console.log(value)
})
.catch(function (err) {
throw err
})
Share
Improve this question
asked Oct 31, 2015 at 8:09
ThomasReggiThomasReggi
59.6k97 gold badges258 silver badges459 bronze badges
0
1 Answer
Reset to default 11Because promises only fire once. A promise is created/initialized, and then settled, and once settled can never be un-settled or re-settled. Calling resolve
or reject
a second (third, fourth, ...) time is a no-op. (Some believe it should be an error, but it isn't.) Promises are not events, they cannot recur. So for what that code is doing, a promise isn't the right tool.
本文标签: javascriptPromise is only firing onceStack Overflow
版权声明:本文标题:javascript - Promise is only firing once? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742127041a2421989.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论