节点js。如何在两个函数之间共享数组?有没有那么复杂的方式

时间:2017-10-28 10:11:12

标签: node.js synchronization atomic

我对nodejs很新,并且卡在一个函数填充数组而另一个函数从中读取数据的位置。

是否有任何简单的构造来同步它。

代码看起来像下面

let arr = [];
let prod = function() {
    arr.push('test');
};

let consume = function() {
    process(arr.pop());
};

我确实找到了一些复杂的方法:(

非常感谢你的帮助...☺️

2 个答案:

答案 0 :(得分:1)

通过同步你可能意味着应用程序一侧的推送应该触发另一方的弹出。这可以通过使用NodeJS Events模块的非常简单的事件驱动方法来实现。

但是,在简单的情况下,您可以尝试使用中间对象的另一种方法来执行数组操作的封装,并利用提供的回调来实现可观察的行为。

// Using the Modular pattern to make some processor
// which has 2 public methods and private array storage
const processor = () => {
  const storage = [];

  // Consume takes value and another function
  // that is the passed to the produce method
  const consume = (value, cb) => {
    if (value) {
      storage.push(value);
      produce(cb);
    }
  };

  // Pops the value from storage and
  // passes it to a callback function
  const produce = (cb) => {
    cb(storage.pop());
  };

  return { consume, produce };
};

// Usage
processor().consume(13, (value) => {
  console.log(value);
});

这真的是一个noop的例子,但我认为这应该创建一个基本的理解如何构建"同步"您已经提到的机制,使用观察者行为和基本的JavaScript回调。

答案 1 :(得分:0)

您可以使用回调在两个函数之间共享数据

function prod(array) {
  array.push('test1')
}

function consume() {
  prod(function (array) {
    console.log(array)
  })
}