2015-10-31 3 views
0

Есть ли какая-либо причина, по которой обещание ниже только стрельбы?Обещание только один раз?

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

ответ

7

Потому что обещает только огонь один раз. Обещание создается/инициализируется, а затем разрешается, и после его разрешения никогда нельзя будет уладить или переустановить. Вызов resolve или reject второе (третье, четвертое, ...) время - это не-op. (Некоторые считают, что это ошибка, но это не так.) Обещания - это не события, они не могут повторяться. Поэтому для того, что делает этот код, обещание - это не правильный инструмент.