Я не знаю, правильно ли я использую метод .spread
при работе с промисами Bluebird в моделях Sails.js. Вот что у меня есть:
transactionAsync('BEGIN')
.then(function() {
return Model.findOne({ id: 5) });
})
.then(function(results){
if(!results) {
return res.notFound();
}
crypto.randomBytes(24, function(err, buf) {
if(err) throw new Error(err);
var token = buf.toString('hex');
// This is where it fails
return [results, token];
});
})
.spread(function(results, token) {
// It doesn't get to log these
console.log(results, token);
...
})
...
После возврата [results, token]
на втором .then
(внутри обратного вызова криптографии) он выплевывает
[TypeError: expecting an array, a promise or a thenable]
Я удалил остальную часть кода после .spread
, так как он не очень актуален, и именно здесь выполнение останавливается перед возвратом ошибки.
Я просто хочу передать переменные results
и token
в функцию внутри .spread
. Что я делаю не так?
Любая помощь прекрасна. Спасибо.
.spread()
, и я уверен, что все, что находится внутри криптографии, действительно запускается до возврата. Я предполагаю, что, может быть, мне не следует размещать асинхронный код, такой как crypto.randomBytes, внутри обещания? Или, возможно, просто сделайте crypto.randomBytes частью цепочки обещаний. - person Lester   schedule 03.04.2015console.log("bla")
передreturn [results, token]
приводит к регистрацииbla
. Но после этого ничего не пишет. - person Lester   schedule 03.04.2015