Я не знаю, если я не использую метод .spread
правильно при работе с Bluebird обещаний на Sails.js моделей. Вот что у меня есть:Bluebird метод обещания распространения возвращает TypeError
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()? –
Да, ну, не получается выполнить код внутри '.spread()', и я уверен, что все, что находится внутри криптона, действительно выполняется, перед возвратом. Я предполагаю, что, возможно, я не должен помещать async-код, например crypto.randomBytes, в обещание? Или, возможно, просто сделайте crypto.randomBytes частью цепочки обещаний. – Lester
Просто поместите некоторые console.log() и проследите, где останавливается выполнение? Здесь ваша ошибка указывает на то, что любая из функций then() или spread() не получает ожидаемых аргументов, поэтому может быть некоторые, где ваш поток возвращается как неопределенный. –