将一个函数的返回值传递给另一个已设置参数的函数?

时间:2015-06-02 04:26:51

标签: node.js function return processing osc

编辑:我知道JS是异步的,我已经查看了如何返回线程。我遇到的问题是从“foo”示例到特定的东西=我不太确定哪里重新格式化这个。

此处还有一些背景信息:https://github.com/sharkwheels/beanballs/blob/master/bean-to-osc-two.js

我对节点中的返回有疑问。这可能是一个愚蠢的问题,但在这里。我有一个连接到套接字的函数,并从处理中获取OSC消息:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="canToggle">
  <tr>
    <td>
      <div class="messagepop pop">
        <p class="selection">moss</p>
        <p class="selection">gray</p>
        <p class="close">Cancel</p>
      </div>
      <img src="images/gray.jpg" class="wide high image" id="x1y1" />
    </td>

  </tr>
  <table>

下面我有另一个函数的开头,将一些数组写入BLE设备。它需要来自不同功能的名称和特征。如何让以下函数使用isAll AND 两个现有参数?

var sock = dgram.createSocket("udp4", function(msg, rinfo) {

    try {

        // get at all that info being sent out from Processing.

        //console.log(osc.fromBuffer(msg));

        var getMsg = osc.fromBuffer(msg);
        var isMsg = getMsg.args[0].value;
        var isName = getMsg.args[1].value;
        var isAdd = getMsg.address;
        var isType = getMsg.oscType;

        // make an array out of it

        var isAll = [];
        isAll.push(isName);
        isAll.push(isMsg);
        isAll.push(isAdd);
        isAll.push(isType);

        // return the array 
        console.log(isAll);
        return isAll; 


    } catch (error) {
        console.log(error);
    }
});

感谢。

2 个答案:

答案 0 :(得分:0)

在这种情况下,

异步调用是这样编写的。如果需要,可以在闭包中保持变量状态。在这种特殊情况下 - 你也可以没有任何状态(isAll)。

var isAll;
var soc = dgram.createSocket('udp4', oncreatesocket);
function oncreatesocket(msg, rinfo)
{
    isAll = parseMessage(msg);
    writeData(isAll);
}
function parseMessage(msg) {
    ...
    // code to parse msg and return isAll
}
function writeData() {}

如果writeData足够小的功能。它可以在oncreatesocket内,而不会影响代码的可读性。

答案 1 :(得分:0)

好的。所以我想出了要做什么,至少在这种情况下。我确信有更好的方法可以做到这一点,但就目前而言,这是有效的。

我将现有的全局外设数组映射到write函数,同时将OSC消息作为参数传递给它。这解决了我的问题“如何将两条信息送到同一个地方”。它确定哪个外设是哪个,并相应地向每个外设的每个临时存储区写入不同的值。离开这里以备将来参考。

var writeToBean = function(passThrough){

var passThrough = passThrough;

console.log("in Write to bean: ", passThrough);

_.map(beanArray, function(n){
    if(n.advertisement.localName === passThrough.name){

        //var name = n.advertisement.localName;

        n.discoverSomeServicesAndCharacteristics(['a495ff20c5b14b44b5121370f02d74de'], [scratchThr], function(error, services, characteristics){

            var service = services[0];
            var characteristic = characteristics[0];
            var toSend = passThrough.msg;

            console.log("service", service);
            console.log("characteristic", characteristic);

            if (toSend != null) {
                characteristic.write(new Buffer([toSend]), false, function(error) {
                    if (error) { console.log(error); }
                        console.log("wrote " + toSend + " to scratch bank 3");
                });
            }

            // not sure how to make the program resume, it stops here. No error, just stops processing. 

        });
    }       
});
}