有什么理由使下面的承诺仅触发一次?
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 })
因为诺言只能发射一次。创建/初始化诺言,然后进行结算,一旦结算,便永远无法取消或重新结算。打电话resolve或reject第二次(第三,第四,…)时间是无人值守。(有些人认为应该是一个错误,但不是。)承诺不是事件,它们不能重复发生。因此,对于该代码在做什么,承诺不是正确的工具。
resolve
reject