Promise 只触发一次?

3
以下承诺只触发一次的原因是什么?
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
  })
1个回答

11

因为Promise只会执行一次。一个Promise被创建/初始化之后,就会被解决(settled),一旦解决了就不能再次被撤销或重新解决。第二次(第三次、第四次等)调用resolvereject不起作用(有些人认为这应该是一个错误,但实际上并不是)。 Promise不是事件,它们不能重复发生。所以对于代码要达到的目的,Promise不是正确的工具。


针对这种情况,您有什么建议? - Edy Segura
1
@EdySegura - 一个 EventEmitter,即发布/订阅模式。 - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接