我了解异步性的基本知识:事物不会顺序执行。据我了解,这有很强大的功能。但是对于我的一生,我无法全神贯注于代码。让我们看一下我已经写过的异步Node.JS代码…但是并没有真正得到。
function newuser(response, postData) {
console.log("Request handler 'newuser' was called.");
var body = '<html>' +
'<head>' +
'<meta http-equiv="Content-Type" content="text/html; ' +
'charset=UTF-8" />' +
'</head>' +
'<body>' +
'<form action=" /thanks" method="post">' +
'<h1> First Name </h1>' +
'<textarea name="text" rows="1" cols="20"></textarea>' +
'<h1> Last Name </h1>' +
'<textarea name="text" rows="1" cols="20"></textarea>' +
'<h1> Email </h1>' +
'<textarea name="text" rows="1" cols="20"></textarea>' +
'<input type="submit" value="Submit text" />' +
'</body>' +
'</html>';
response.writeHead(200, { "Content-Type": "text/html" });
response.write(body);
response.end();
}
响应又从何而来?发布数据?为什么不能在此“回调”中定义变量,然后在回调之外使用它?有没有一种方法可以让一些东西顺序化,然后使其余程序异步?
我不确定在何处使用此函数,但回调的要点是您将它们传递给异步运行的某个函数。它存储了您的回调,当该函数完成需要执行的操作时,它将使用必要的参数 调用
回调。从前到后的示例可能是最好的。
假设我们有一个框架,其中有一个运行了很长时间的操作,该操作从数据库中获取了一些数据。
function getStuffFromDatabase() {
// this takes a long time
};
由于我们不希望它同步运行,因此我们允许用户传递回调。
function getStuffFromDatabase(callback) {
// this takes a long time
};
我们将模拟长时间调用setTimeout
;我们还将假装我们从数据库中获得了一些数据,但是我们只是硬编码一个字符串值。
function getStuffFromDatabase(callback) {
setTimeout(function() {
var results = "database data";
}, 5000);
};
最后,一旦有了数据,我们将 调用 框架函数用户提供给我们的回调。
function getStuffFromDatabase(callback) {
setTimeout(function() {
var results = "database data";
callback(results);
}, 5000);
};
作为框架的用户,您可以执行以下操作来使用该函数:
getStuffFromDatabase(function(data) {
console.log("The database data is " + data);
});
所以,你可以看到data
(同response
和postData
在你的例子),从你通过回调函数来 成 ;
当它知道数据应该是什么时,它将把数据提供给您。
您无法在回调中设置值并无法在回调之外使用它的原因是,回调本身直到稍后才发生。
// executed immediately executed sometime in the future
// | | by getStuffFromDatabase
// v v
getStuffFromDatabase(function(data) {
var results = data; // <- this isn't available until sometime in the future!
});
console.log(results); // <- executed immediately
当console.log
运行时,的分配var results
还没有发生!
问题内容: 我经历了一个Java教程,该教程使我可以创建一个文本文件,并在其中写上“ 20 Bruce Wayne”字样。在主类中最后一个调用的方法名为closeFile(),它在创建文本文件后“关闭”该文本文件。 如果我没有真正打开文件,为什么需要“关闭”文件?“打开”是指记事本编辑器(不是我使用的IDE)弹出并带有“ 20 Bruce Wayne”字样。请以外行的方式回答我的问题。 Main.
英文原文:http://emberjs.com/guides/understanding-ember/managing-asynchrony/ Ember管理异步 许多Ember的概念都是用来管理异步行为的,比如绑定和计算属性。 Ember之外 本文将从使用jQuery和其他基于事件的MVC框架入手,分析管理异步行为的方法。 下面采用一个Web应用中非常普遍的异步行为作为例子,就是发起一个Ajax
我很难理解官方文档(https://www.khronos.org/opengl/wiki/rendering_pipeline_overview)中使用的术语 > 它说准备顶点数组数据可以类似于给定一个3D位置数据和UV纹理坐标列表,以及一个索引列表,它可以生成一个顶点流。 然后需要对这些顶点流进行解释,以便OpenGL可以对其进行操作。例如,12个顶点的流可以被解释为4个单独的三角形或10个依
本文向大家介绍理解javascript异步编程,包括了理解javascript异步编程的使用技巧和注意事项,需要的朋友参考一下 一、异步机制 JavaScript的执行环境是单线程的,单线程的好处是执行环境简单,不用去考虑诸如资源同步,死锁等多线程阻塞式编程等所需要面对的恼人的问题。但带来的坏处是当一个任务执行时间较长时,后面的任务会等待很长时间。在浏览器端就会出现浏览器假死,鼠标无法响应等情况。
异步代码是指当调用后不会立即完成的代码。 setTimeout(() => { console.log('do stuff'); }, 3000 ) 在 setTimeout 执行完3秒后 do stuff 会输出到控制台。我们可以看出当指定的时间过去后我们所提供的异步函数会触发。现在来看个更有启发性的示例: doWork( () => { console.log('call me whe
本文向大家介绍Node.js中的异步生成器与异步迭代详解,包括了Node.js中的异步生成器与异步迭代详解的使用技巧和注意事项,需要的朋友参考一下 前言 生成器函数在 JavaScript 中的出现早于引入 async/await,这意味着在创建异步生成器(始终返回 Promise 且可以 await 的生成器)的同时,还引入了许多需要注意的事项。 今天,我们将研究异步生成器及其近亲——异步迭代。