如果我沒有正確使用.spread
法藍鳥承諾在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);
...
})
...
第二.then
返回[results, token]
(該密碼回調的內部)後,吐出
[TypeError: expecting an array, a promise or a thenable]
我刪除了代碼的其餘部分.spread
後,因爲它不是真正相關的,這就是執行停止之前返回一個錯誤。
我只想results
和token
傳遞變量的.spread
裏面的功能。我究竟做錯了什麼?
任何幫助都很好。謝謝。
你確定你停止執行.spread()? – 2015-04-03 00:40:13
是的,它不會執行'.spread()'內部的代碼,並且我確信在返回之前,密碼中的任何內容都會實際運行。我猜,也許我不應該把異步代碼像crypto.randomBytes放在promise中?或者也許只是讓crypto.randomBytes成爲承諾鏈的一部分。 – Lester 2015-04-03 00:44:46
只需放置一些console.log()並跟蹤執行停止的位置?這裏你的錯誤是指示任何then()函數或者spread()都沒有得到預期的參數,所以可能會有一些地方你的流程返回爲未定義的。 – 2015-04-03 00:58:37