编程语言
首页 > 编程语言> > javascript – 承诺只发射一次?

javascript – 承诺只发射一次?

作者:互联网

有什么理由说下面的承诺只会发射一次吗?

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
  })

解决方法:

因为承诺只会发射一次.承诺被创建/初始化,然后结算,一旦结算,永远不会解决或重新解决.呼叫解决或拒绝第二(第三,第四,……)时间是无操作. (有些人认为它应该是一个错误,但事实并非如此.)承诺不是事件,它们不能再发生.因此,对于代码正在做什么,承诺不是正确的工具.

标签:javascript,node-js,bluebird
来源: https://codeday.me/bug/20191002/1845564.html