是否可以从node.js中的stdin同步读取?因为我正在用JavaScript编写一个关于JavaScript编译器的脑筋(只是为了好玩).Brainfuck支持需要同步实现的读取操作.
我试过这个:
const fs = require('fs');
var c = fs.readSync(0,1,null,'utf-8');
console.log('character: '+c+' ('+c.charCodeAt(0)+')');
Run Code Online (Sandbox Code Playgroud)
但这只产生这个输出:
fs:189
var r = binding.read(fd, buffer, offset, length, position);
^
Error: EAGAIN, Resource temporarily unavailable
at Object.readSync (fs:189:19)
at Object.<anonymous> (/home/.../stdin.js:3:12)
at Module._compile (module:426:23)
at Module._loadScriptSync (module:436:8)
at Module.loadSync (module:306:10)
at Object.runMain (module:490:22)
at node.js:254:10
Run Code Online (Sandbox Code Playgroud) 实际上没有人问过这个问题(来自我提出的所有"建议"以及我在这里询问之前的搜索).
那么为什么node.js是异步的呢?
根据我在一些研究后得出的结论:
像PHP和Python这样的语言是脚本语言(我可能错误的是脚本语言的实际语言),而JavaScript则不然.(我想这源于JS不编译的事实?)
Node.js在单个线程上运行,而脚本语言使用多个线程.
异步意味着无状态,并且连接是持久的,而同步是(几乎)相反的.
也许答案是在上面所说的地方找到的,但我仍然不确定.
我与本主题相关的第二个也是最后一个问题是:
JavaScript可以成为同步语言吗?
PS.我知道有些人会问"你为什么要让JS同步?" 在你的答案中,但事实是我没有.我只是问这些类型的问题,因为我确信那里有更多的人,而不仅仅是我自己想过这些问题.
问题相当简单和技术性:
var it_works = false;
$.post("some_file.php", '', function(data) {
it_works = true;
});
alert(it_works); # false (yes, that 'alert' has to be here and not inside $.post itself)
Run Code Online (Sandbox Code Playgroud)
我想要实现的是:
alert(it_works); # true
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?如果没有可以$.post()返回要应用的值it_works?
我有一个使用AFJSONRequestOperation的函数,我希望仅在成功后返回结果.你能指出我正确的方向吗?对于块和AFNetworking,我仍然有点无能为力.
-(id)someFunction{
__block id data;
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json){
data = json;
return data; // won't work
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
}];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation: operation];
return data; // will return nil since the block doesn't "lock" the app.
}
Run Code Online (Sandbox Code Playgroud) 我在index.html文件中有多个lib文件,它们按正确顺序加载到我正在运行的应用程序中.
<!-- example of some of them... -->
<script src="/./sys/lib/jquery.min.js"></script>
<script src="/./sys/lib/jquery.ui.min.js"></script>
<script src="/./sys/lib/jquery.easing.min.js"></script>
<script src="/./sys/lib/underscore.min.js"></script>
<script src="/./sys/lib/handlebars.min.js"></script>
<script src="/./sys/lib/backbone.min.js"></script>
<script src="/./sys/lib/moment.min.js"></script>
<script src="/./sys/lib/libs.extensions.js"></script>
Run Code Online (Sandbox Code Playgroud)
它们运行良好,它们已经全部缩小了.
现在,我想将这些全部组合到一个文件中以加载速度:
<script src="/./sys/lib/libs.all.js"></script>
Run Code Online (Sandbox Code Playgroud)
所以我打开新libs.all.js文件,逐个将缩小的.js文件粘贴到其中,零修改,按照与上面列出的完全相同的顺序.这有效,直到我到达moment.js.当我将其粘贴并运行它时,我得到一个JS错误.
TypeError: (intermediate value)(...) is not a function
Run Code Online (Sandbox Code Playgroud)
我没有得到我所缺少的东西 - 如果我在HTML文件中同步加载时按正确顺序粘贴它们,有什么区别?
我正在制作一个程序,将文本转换为莫尔斯电码音频.
说我输入sos.我的程序将把它变成数组[1, 1, 1, 0, 2, 2, 2, 0, 1, 1, 1].哪里s = dot dot dot(或1,1,1),和o = dash dash dash(或2,2,2).这部分很容易.
接下来,我有两个声音文件:
var dot = new Audio('dot.mp3');
var dash = new Audio('dash.mp3');
Run Code Online (Sandbox Code Playgroud)
我的目标是有一个功能,dot.mp3当它看到a时1,dash.mp3当它看到a时会播放,并在看到a 2时暂停0.
以下类型/有时/有时可行,但我认为它存在根本缺陷,我不知道如何修复它.
function playMorseArr(morseArr) {
for (let i = 0; i < morseArr.length; i++) {
setTimeout(function() {
if (morseArr[i] === 1) {
dot.play();
}
if (morseArr[i] === …Run Code Online (Sandbox Code Playgroud) 除了特定问题的异步/同步特性,并考虑到MOM(在这种情况下选择了JMS)提供免费的额外功能,如负载平衡和其他功能,在选择JMS而不是REST时还可以考虑其他什么,反之亦然?
谢谢
我正在编写一个Visual C#程序,它在辅助线程上执行连续的操作循环.偶尔当该线程完成任务时,我希望它触发一个事件处理程序.我的程序执行此操作但触发事件处理程序时,辅助线程等待事件处理程序完成后再继续执行该线程.如何让它继续?这是我目前的结构方式......
class TestClass
{
private Thread SecondaryThread;
public event EventHandler OperationFinished;
public void StartMethod()
{
...
SecondaryThread.Start(); //start the secondary thread
}
private void SecondaryThreadMethod()
{
...
OperationFinished(null, new EventArgs());
... //This is where the program waits for whatever operations take
//place when OperationFinished is triggered.
}
}
Run Code Online (Sandbox Code Playgroud)
此代码是我的某个设备的API的一部分.当触发OperationFinished事件时,我希望客户端应用程序能够执行它所需的任何操作(即相应地更新GUI),而不会导致API操作.
另外,如果我不想将任何参数传递给事件处理程序,我的语法是否正确使用OperationFinished(null, new EventArgs())?
有没有办法像同步XMLHttpRequest一样以同步方式加载和执行javascript文件?
我目前正在使用同步XMLHttpRequest,然后使用eval,但调试该代码非常困难......
谢谢你的帮助!
更新
我现在试过这个:
的test.html
<html>
<head>
<script type="text/javascript">
var s = document.createElement("script");
s.setAttribute("src","script.js");
document.head.appendChild(s);
console.log("done");
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
的script.js
console.log("Hi");
Run Code Online (Sandbox Code Playgroud)
输出:完成嗨
所以它没有同步执行.任何想出"嗨"的想法首先出现?
更新2 其他示例
test.html(脚本标记内的代码)
var s = document.createElement("script");
s.setAttribute("src","script.js");
document.head.appendChild(s);
SayHi();
Run Code Online (Sandbox Code Playgroud)
的script.js
function SayHi(){
console.log("hi");
}
Run Code Online (Sandbox Code Playgroud)
输出:未捕获的ReferenceError:未定义SayHi
synchronous ×10
javascript ×5
asynchronous ×2
node.js ×2
afnetworking ×1
ajax ×1
c# ×1
eventargs ×1
global ×1
html ×1
html5-audio ×1
integration ×1
io ×1
ios ×1
jms ×1
jquery ×1
load ×1
playback ×1
posix ×1
rest ×1
stdin ×1