编辑:我知道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);
}
});
感谢。
答案 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.
});
}
});
}