作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图找出为什么我的 Promise 链执行无序,尽管编写了一个非嵌套的 then 链。我的函数已经模块化,以减少链中发生的代码膨胀(我期望有五个 then 方法),并且我不确定这些模块中的某些内容是否导致顺序跳转,或者是否是由于我的原因总体 promise 结构。
这是终端输出:
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)
这是我的 promise 结构:
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;
})
}
}
最佳答案
您在 .then()
甚至调用其回调之前直接调用该函数(并将返回值从该函数传递给 .then()
):
.then(deleteAccount.cancelStripeAccount(req.session.subscriptionId,
canceledStripeAccount, canceledAt))
相反,.then()
应该传递一个函数引用,以便它可以稍后调用该函数:
.then(() => deleteAccount.cancelStripeAccount(req.session.subscriptionId,
canceledStripeAccount, canceledAt))
关于Javascript 模块化 Promise 链乱序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44960658/
序 大家好呀,我是summo,这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛,2核2G的云服务器一年只要99块钱,懂行的人应该知道这个价格在业界已经是非常良心了
我尝试根据给定的级别顺序(BFS 顺序)构造 BST。我知道这是可能的,但我不知道我该怎么写。问题是我必须使用 BFS 序列。所以,我不能在这里使用递归,我必须迭代地编写我的程序......我发现这有
我是一名优秀的程序员,十分优秀!