要在node.js中的两个线程之间传递引用吗
我试图在node.js中实现以下步骤要在node.js中的两个线程之间传递引用吗,node.js,multithreading,queue,pass-by-reference,Node.js,Multithreading,Queue,Pass By Reference,我试图在node.js中实现以下步骤 可以使用我的RESTAPI下订单并支付 一旦订单状态从下单变为已付,它将在数据结构中排队 一个单独的线程持续运行,以检查队列中是否有订单。如果队列中有订单,则该订单将退出队列,并开始准备、服务和收集。这里,队列中可能有许多订单,或者根本没有 我在这里分享我的代码 //order.js var Queue = require('queuejs'); var queue = new Queue(); queue.enq("hello"); const thr
- 可以使用我的RESTAPI下订单并支付
- 一旦订单状态从下单变为已付,它将在数据结构中排队
- 一个单独的线程持续运行,以检查队列中是否有订单。如果队列中有订单,则该订单将退出队列,并开始准备、服务和收集。这里,队列中可能有许多订单,或者根本没有李>
var Queue = require('queuejs');
var queue = new Queue();
queue.enq("hello");
const threads = require('threads');
const spawn = threads.spawn;
const thread = spawn(function(){});
exports.payOrder = function (req, res) {
//after changing order status to PAID in database, I enq it in queue.
queue.enq(id);
};
exports.processOrder = function () {
spawn("./routes/helper.js").send();
};
exports.queue = queue;
//helper.js
const Sync = require('sync');
const order = require('./order');
const dao = require('./dao');
const config = require('./config');
Sync(function () {
console.log("in sync");
while (true) {
// I got queue size always 0(zero), even though I called pay api(meaning put order into the queue by calling api)
if (order.queue.size() > 0) {
console.log("here");
var id = order.queue.deq();
var query = "query string";
dao.client.execute(query, [config.orderStatus.preparing, id], {prepare: true}, function (err, result) {
Sync.sleep(5000);
dao.client.execute(query, [config.orderStatus.served, id], {prepare: true}, function (err, result) {
Sync.sleep(5000);
dao.client.execute(query, [config.orderStatus.collected, id], {prepare: true}, function (err, result) {
Sync.sleep(5000);
});
});
});
}
}
});
我已将队列导出到order.js中,但它未与helper线程共享引用
我已经应用了很多方法来实现上述功能,但未能成功实现。
谁能给我建议一下解决办法吗 您不能与
线程
模块共享引用。您只能发送消息。您可以在不使用队列的情况下构建它,也可以使用进程外队列。一种选择是只使用两个进程和kue
模块
例如:
var kue = require('kue')
, queue = kue.createQueue();
queue.process('email', function(job, done){
email(job.data.to, done);
});
function email(address, done) {
if(!isValidEmail(address)) {
//done('invalid to address') is possible but discouraged
return done(new Error('invalid to address'));
}
// email send stuff...
done();
}
您不能与
线程
模块共享引用。您只能发送消息。您可以在不使用队列的情况下构建它,也可以使用进程外队列。一种选择是只使用两个进程和kue
模块
例如:
var kue = require('kue')
, queue = kue.createQueue();
queue.process('email', function(job, done){
email(job.data.to, done);
});
function email(address, done) {
if(!isValidEmail(address)) {
//done('invalid to address') is possible but discouraged
return done(new Error('invalid to address'));
}
// email send stuff...
done();
}
谢谢你的回复。抱歉,我仍然不明白如何根据我的要求使用kue模块。你能详细说明一下吗?我可以,但你甚至没有尽一点努力来应用我所说的,所以如果你学会如何做自己的编程,那就更好了。谢谢你的回复。抱歉,我仍然不明白如何根据我的要求使用kue模块。你能详细说明一下吗?我可以,但你甚至没有尽一点努力来应用我说的话,所以如果你学会如何自己编程就更好了。