Promise 只触发一次?
Promise 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
})
因为承诺只会触发一次。承诺是 created/initialized,然后结算,一旦结算就永远无法取消或重新结算。第二次(第三次、第四次……)调用 resolve
或 reject
是空操作。 (有些人认为这应该是一个错误,但事实并非如此。)承诺不是事件,它们不能重现。因此,对于该代码的作用,promise 不是正确的工具。
下面的承诺只触发一次有什么原因吗?
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
})
因为承诺只会触发一次。承诺是 created/initialized,然后结算,一旦结算就永远无法取消或重新结算。第二次(第三次、第四次……)调用 resolve
或 reject
是空操作。 (有些人认为这应该是一个错误,但事实并非如此。)承诺不是事件,它们不能重现。因此,对于该代码的作用,promise 不是正确的工具。