我想弄清楚为什么我的承诺链执行失序,尽管写了一个非嵌套的然后链。我的函数已被模块化,以减少将在我的链中发生的代码膨胀(我期望有五个方法),我不确定这些模块中的某些内容是否导致顺序跳转,或者是由于我的总体承诺结构。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