Javascript 类似的东西在异步代码中工作吗?
现在它似乎在做我希望它能做的事情,但我不知道它是否安全。这有时会导致未定义吗?我是否需要执行以下操作:Javascript 类似的东西在异步代码中工作吗?,javascript,jquery,asynchronous,node.js,callback,Javascript,Jquery,Asynchronous,Node.js,Callback,现在它似乎在做我希望它能做的事情,但我不知道它是否安全。这有时会导致未定义吗?我是否需要执行以下操作: regular = 'a string'; enriched = enrichString(regular); sys.puts(enriched); function enrichString(str){ //run str through some regex stuff or other string manipulations return str; } 谢谢你的帮
regular = 'a string';
enriched = enrichString(regular);
sys.puts(enriched);
function enrichString(str){
//run str through some regex stuff or other string manipulations
return str;
}
谢谢你的帮助 不,你应该没事的。计算代码的直接运行本质上不是异步的。当某些操作涉及外部资源时,需要回调—文件I/O、网络操作、某些操作系统交互等。只有在进行非同步非阻塞调用时,才需要回调
regular = 'a string';
enriched = enrichString(regular, function(data){sys.puts(data);});
function enrichString(str, cb){
//run str through some regex stuff or other string manipulations
cb(str);
}
如果enrich
被阻塞,则是安全的。比如说
var string = "foo",
new_string = enrich(foo);
doStuff(new_string);
正在阻止,所以这样做是安全的。何处为
function enrich(str) {
// do regex stuff with str
// manipulate it
return str;
}
使用非阻塞IO且不安全。您要做的是:
function enrich(str) {
// get some data from the database.
// store the string in a file.
return str;
}
注意
experiment=enrichString(常规,系统输入(数据))代码>
不起作用,因为您将返回值sys.put(data)
作为函数参数传递(数据也未定义!)
您需要传入一个函数。为了添加Pointy的响应,人们有时会使用process.nextTick(或在浏览器setTimeout(fn,0))强制执行异步行为-这会强制当前执行上下文。例如:@Pointy你还是打败了我,因为你做了旧的答案增量更改。啊,是的,在sys.puts()中传递的示例弄糟了-感谢所有伟大的infoorsetTimeout
,setInterval
等等。
function enrich(str, cb) {
// get some data from the database.
// store the string in a file.
return cb(str);
}
var string = "foo",
new_string = enrich(foo, function (str) {
doStuff(new_string);
});