我想弄清楚爲什麼我的承諾鏈執行失序,儘管寫了一個非嵌套的然後鏈。我的函數已被模塊化,以減少將在我的鏈中發生的代碼膨脹(我期望有五個方法),我不確定這些模塊中的某些內容是否導致順序跳轉,或者是由於我的總體承諾結構。Javascript Modularized Promise Chain Out of Order
這裏是終端輸出:
Executing (a6bf615e-5497-47b2-8aea-3f7d70927cba): START TRANSACTION;
Executing (a6bf615e-5497-47b2-8aea-3f7d70927cba): SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Step 1: Document Find
Step 3: Cancel Stripe Subscription
string //console.log(typeof subscriptionId);
sub_jsdfjsdfjdsfjsdfj //console.log(subscriptionId)
Executing (a6bf615e-5497-47b2-8aea-3f7d70927cba): SELECT ....
Step 2: Set Array
[ 13, 14 ] //console.log(documentArr);
undefined //console.log(canceledStripeAccount);
undefined //console.log(canceledAt)
這是我的承諾結構:
var sequelize = require('sequelize');
var models = require('../../../models/db-index');
var deleteAccount = require('./delete-account');
//DELETE /settings/account
exports.delete = function(req, res){
var documents;
var documentArr;
var canceledStripeAccount;
var canceledAt;
return models.sequelize.transaction().then(function(t){
return deleteAccount.queryAllDocuments(req.session.organizationId, t)
.then(function(_document){
console.log("Step 2: Set Array");
documentArr = _document;
console.log(documentArr);
})
.then(deleteAccount.cancelStripeAccount(req.session.subscriptionId, canceledStripeAccount, canceledAt))
.then(function(canceledStripeAccount){
console.log(canceledStripeAccount);
console.log(canceledAt)
});
});
};
模塊文件:
var models = require('../../../models/db-index');
var components = require('./components');
var stripe = require('stripe')(process.env.STRIPE_API_KEY);
module.exports = {
queryAllDocuments: function(organization, t){
console.log("Step 1: Document Find");
return models.Document.findAll({
include: [{
model: models.User,
include: [{
model: models.Organization,
where: {
organizationId: organization
}
}]
}],
transaction: t
})
},
cancelStripeAccount: function(subscriptionId, canceledStripeAccount, canceledAt){
console.log("Step 3: Cancel Stripe Subscription");
console.log(typeof subscriptionId);
console.log(subscriptionId)
return stripe.subscriptions.del(subscriptionId).then(function(_canceledStripeAccount){
return canceledStripeAccount = _canceledStripeAccount;
//canceledAt = canceledStripeAccount.canceled_at;
})
}
}
也許無關,但'components'沒有在'then'處理程序中定義 – MinusFour
感謝您的漁獲物,其實我刪除的功能,清理的問題的代碼。與我面臨的問題無關。 – cphill