我很好奇所有的javascript回调是否都是异步的,或者只是在某些情况下是这种情况.此外,我确定是什么让javascript代码异步(或使用异步javascript的方法)在浏览器和nodejs之间有所不同,所以我想知道在每种情况下什么构成真正的异步javascript.
我的印象是,在下面的场景中,我实际上并没有编写异步代码.
function addOne(value){
value = value + 1;
return value;
}
function simpleMap(values, callback){
for(i = 0; i < values.length; i++){
val = values[i];
val = callback(val);
values[i] = val;
}
return values;
}
newValues = simpleMap([1,2,3], addOne);
Run Code Online (Sandbox Code Playgroud)
但是,例如,我知道jQuery的AJAX函数是真正异步的(不考虑现在可用的承诺).是什么让jQuery的AJAX异步?是否涉及XHR请求这么简单,在浏览器中,所有XHR请求都是异步的?
我对nodejs环境有同样的问题.节点中的某些东西只有在涉及文件i/o,process.nextTick,setTimeout或setInterval之类的东西时才能是异步的吗?为什么当我使用mongodb/mongoose进行数据库调用时,是异步的?幕后发生了怎样的事情呢?
异步"情况"是否由环境预先确定?或者是否有某种方法可以使自己的函数真正异步而不利用环境的非常特定的函数(例如xhr,节点中的文件io,process.nexttick等)?
我不明白回调方法是什么,我听说人们非常松散地使用这个术语.在java世界中,什么是回调方法?如果有人可以提供带有解释的java回调方法的示例代码,那么在我的java学习之旅中它会有很大的帮助吗?
先感谢您.
我很难理解异步调用和回调之间的区别.
我读过这篇讲授CallBacks的帖子,但没有一个答案说明它与异步调用的区别.
这是Callbacks = Lambda表达式吗?
回调是在不同的线程中运行的?
有人能用简单的英语解释这个吗?
背景:对我来说,回调的概念很灵活,这似乎很清楚,但我也认为,它使代码更快。但是,以下示例有效,但无法表明可以使用回调Ref1节省时间:
\nimport time\nfrom time import sleep\n\ndef callbackFunc(delay):\n time.sleep(delay)\n print("callback: message 3 delay " + str(delay))\n\ndef saysomething(delay, callback):\n print("saysomething: message 2 delay " + str(delay))\n callback(delay) # hier muss ich schon wissen, dass nur "delay" ben\xc3\xb6tigt wird...\n time.sleep(2)\n\nif __name__ == \'__main__\':\n t0 = time.time()\n print("main: message 1.")\n saysomething(2, callbackFunc)\n print("main: message 4.")\n print("\\ntime: ",time.time() - t0)\n
Run Code Online (Sandbox Code Playgroud)\n输出
\nmain: message 1.\nsaysomething: message 2 delay 2\ncallback: message 3 delay 2\nmain: message 4.\ntime: 4.01\n
Run Code Online (Sandbox Code Playgroud)\n那么我怎样才能实现这样的目标
\nmain: message …
Run Code Online (Sandbox Code Playgroud) 我遇到了JavaScript逻辑问题.当我们有一个需要来自事件处理程序的数据来生成结果的函数时,是否可以将该数据恢复功能?例如,如果我们调用Image()
object或FileReader()
inside并等待其load
事件被触发以生成正确的返回结果.
简单的例子:
function imageSize(filename) {
funcResult = false;
var img = new Image();
img.onload = function() {
myResult = {
width: img.width,
height: img.height
}
}
img.src = filename;
return funcResult;
}
Run Code Online (Sandbox Code Playgroud)
当然,它不起作用,因为load
在函数执行后异步发生火灾.但是有一些解决方法可以使功能停止和收听,这是我的主要目标.
或者更复杂的例子(也出于同样的原因也无法工作).
function getImageSize(file) {
res = false;
if (window.FileReader) {
var fileReader = new FileReader();
fileReader.onload = function() {
var img = new Image();
img.onload = function() {
res = {
width : img.width,
height : img.height …
Run Code Online (Sandbox Code Playgroud) callback ×4
asynchronous ×3
javascript ×2
synchronous ×2
java ×1
node.js ×1
python ×1
spring-mvc ×1