【发布时间】:2022-10-04 16:44:02
【问题描述】:
我正在使用异步库来创建队列。
我的队列代码看起来像这样。
const async = require('async');
const db = require('../models');
const logger = require('../logger');
var q = async.queue(async function(task,callback){
console.log(`added ${task.name} to the master queue`);
switch (task.name) {
case 'checkout.session.completed':
let data = task.data;
logger.info('checkout.session.completed');
const stripe_customer_id = data.customer;
const client_reference_id = data.client_reference_id;
logger.info(`Stripe Customer ID = ${stripe_customer_id}`);
logger.info(`Client Reference ID = ${client_reference_id}`);
try {
await db.users.update({
stripe_customerID:stripe_customer_id
},{
where:{
id:client_reference_id
}
})
} catch (error) {
logger.error("Failure occured: " + error.message);
callback(error.message);return;
}
callback(null,{
client_reference_id:client_reference_id,
stripe_customer_id:stripe_customer_id
});return;
default:
break;
}
callback("Error: Queue task name not defined.");
},20);
module.exports = q;
我要做的是传回错误消息或包含 client_reference_id 或 stripe_customer_id 的对象。
我将任务推入队列的代码是这样的
req.master_q.push({name:event.type,data:data}, function(err,results){
logger.info(`${event.type} finished...`);
logger.info("printing results below(success unknown):");
logger.info(JSON.stringify(results));
if(err){
logger.error();("Error below:");
logger.error(err);
res.send({
status: "Failure",
error_message: err
});
}else{
logger.info("printing results below(successful queue):");
logger.info(JSON.stringify(results));
res.send({
status: "Success",
client_reference_id:results.client_reference_id,
stripe_customer_id:results.stripe_customer_id
});
}
})
出于某种原因,错误和结果总是空的。我可以通过控制台判断,如下图。
显然,错误和结果都是未定义的,这应该是不可能的,因为回调代码显然只允许回调以一种或另一种方式返回某些东西,而且我知道它正确地获得了 client_reference_id,因为它显示在控制台中。
我的猜测是我误解了图书馆的工作原理在回调中传回变量但是文档缺少这方面的信息,我在网上找不到任何东西。
我的理解是回调第一个参数是错误,第二个是您可能想要发回的数据,或者回调必须与您在创建任务时使用的任何回调函数的格式相匹配?我不确定,因为不清楚。也许这两者都不是?
特别是这里的代码应该可以工作
callback(null,{
client_reference_id:client_reference_id,
stripe_customer_id:stripe_customer_id
});return;
我的理解是通过为第一个参数发送 null 没有错误,我可以发送一个包含我想在第二个参数中发送回的对象,但它似乎不起作用!
【问题讨论】:
标签: javascript node.js callback queue async.js