任何人都可以给我一个nodeJs回调的简单例子,我已经在很多网站上搜索过相同但不能正确理解它,请给我一个简单的例子.
getDbFiles(store, function(files){
getCdnFiles(store, function(files){
})
})
Run Code Online (Sandbox Code Playgroud)
我想做那样的事......
我一直在努力解决这个问题.我是Javascript的新手,并且一直认为我写的代码已经异步运行了.这是一个通用的例子:
我在函数a中运行了一些代码.函数A然后调用函数B,函数B需要将变量返回给A,因此A可以在以后的操作中使用它.看来,当A调用B时,它仍然继续运行自己的代码,而不是等待其返回值被阻塞,并且B不够快,使得A最终到达需要使用返回的点值,我得到一个未定义的变量类型错误.
我解决这个问题的方法是函数A调用函数B然后调用一个函数C,它将执行A将使用返回值执行的后续操作....我有点通过调用序列化我的代码而不是返回......虽然很麻烦......
以下是在实际代码中发生的示例:
function initialize() {
//Geocode Address to obtin Lat and Long coordinates for the starting point of our map
geocoder = new google.maps.Geocoder();
var results = geocode(geocoder);
makeMap(results[0].geometry.location.lat(), results[0].geometry.location.lng());
}
function geocode(geocoder) {
//do geocoding here...
var address = "3630 University Street, Montreal, QC, Canada";
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
return results;
}
else {
alert("Geocode was not successful for the following reason: " + status);
} …
Run Code Online (Sandbox Code Playgroud) 我是JavaScript和node.js的新手.我想遍历一个目录并将所有文件stat(不是其他目录)添加到数组中.如下所示,我的代码存在问题,因为在for循环结束后可能会调用回调,因此在回调方法中使用"i"变量将无效.但是代码应该如何看待下面的代码片段呢?它与闭合有关吗?
感谢帮助!
fs.readdir(SYNCDIR, function(err1, files) {
var filesOnly = [];
if(!err1) {
for(var i = 0; i < files.length; i++) {
var imgFilePath = SYNCDIR + '/' + files[i];
fs.stat(imgFilePath, function(stat){
if (stat.isFile()){
filesOnly[i] = stat; // This will not be correct since the for-loop has finished
}
});
}
}
});
Run Code Online (Sandbox Code Playgroud) 我试图掌握Javascript异步函数和回调.
我被困在回调函数的概念上,我在一些地方阅读:它们用于顺序执行代码(主要是在jquery的上下文中,例如animate)和一些特别在Nodejs上下文的地方; 它们用于并行执行异步并避免阻塞代码.
因此,本主题的一些专家可以阐明这一点,并在我的脑海中清除这个模糊(例子??).所以我可以考虑使用回调函数
或者这完全取决于您在代码中调用/放置回调函数的位置?.
谢谢,
PS:我很害怕这个问题会接近主观但我仍然可以期待这个问题的具体答案(也许是一些例子)
编辑:实际上这是来自互联网的例子让我很暧昧:
function do_a(){
// simulate a time consuming function
setTimeout( function(){
console.log( '`do_a`: this takes longer than `do_b`' );
}, 1000 );
}
function do_b(){
console.log( '`do_b`: this is supposed to come out after `do_a` but it comes out before `do_a`' );
}
do_a();
do_b();
Run Code Online (Sandbox Code Playgroud)
结果
`do_b`: this is supposed to come out after `do_a` but it comes out before `do_a`
`do_a`: this takes longer than `do_b`
Run Code Online (Sandbox Code Playgroud)
当JS是顺序的时候,根据我的理解,do_b应该总是在do_a之后.
问候所有,
我想重复调用一个函数,但希望每个调用仅在前一个调用完成时运行.Async是否适合我的需要?或者这些呼叫并行发生?
谢谢!
加里
我需要异步调用另一个lambda的aws lambda.我有一个同步调用的工作代码.
exports.handler = (event, context, callback) => {
var aws = require('aws-sdk');
var lambda = new aws.Lambda({
region: 'myregion' //change to your region
});
console.log("lambda invoke started");
lambda.invoke({
FunctionName: 'testLambda',
Payload: JSON.stringify(event, null, 2) // pass params
}, function (error, data) {
if (error) {
console.log("error");
callback(null, 'hello world');
}
else {
console.log("lambda invoke end");
callback(null, 'hello world');
}
});
}
Run Code Online (Sandbox Code Playgroud)
但就我而言,'testLambda'是一个耗时的功能.因为我需要在调用'testLambda'函数后退出.然后代码就像这样更新
exports.handler = (event, context, callback) => {
var aws = require('aws-sdk');
var lambda = new aws.Lambda({
region: …
Run Code Online (Sandbox Code Playgroud) asynchronous asynccallback amazon-web-services node.js aws-lambda
我是节点中的新手,所以如果我不明显,请原谅我.在node.js表达app.get函数的应用程序中,我们通常将路由和视图作为参数传递,例如
app.get('/users', user.list);
Run Code Online (Sandbox Code Playgroud)
但在护照 - 谷歌的例子中,我发现他们称之为
app.get('/users', ensureAuthenticated, user.list);
Run Code Online (Sandbox Code Playgroud)
其中ensureAuthenticated是一个函数
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
}
Run Code Online (Sandbox Code Playgroud)
简而言之,这意味着有多个回调在运行时被串联调用.我尝试添加几个更多的功能,使它看起来像
app.get('/users', ensureAuthenticated, dummy1, dummy2, user.list);
Run Code Online (Sandbox Code Playgroud)
我发现ensureAuthenticated,dummy1,dummy2,user.list被串联调用.
对于我的特定要求,我发现在上面的形式顺序调用函数是相当优雅的解决方案,而不是使用异步系列.有人可以解释一下它是如何工作的以及我如何能够实现类似的功能.
我正在学习socket编程,我有以下功能:
public void OnDataReceived(IAsyncResult asyn)
Run Code Online (Sandbox Code Playgroud)
这就是回调设置的方式:
pfnWorkerCallBack = new AsyncCallback(OnDataReceived);
Run Code Online (Sandbox Code Playgroud)
问题是我需要将另一个参数传递给OnDataReceived回调函数,我该怎么做?我正在尝试创建一个简单的tcp服务器,我需要跟踪数据来自哪个客户端.有小费吗?谢谢!
我在代码库中找到$(document).ready(function() {...}
了另一个代码$(document).ready(function() {...}
例如
$(document).ready(function() {
// 20 lines...
$(document).ready(function() {
foo()
}
// 200 lines...
}
function foo() {...}
Run Code Online (Sandbox Code Playgroud)
我想了解执行的顺序,所以我可以安全地重构这个嵌套的回调.外部回调似乎在内部回调执行之前继续执行.外部回调是否保证在内部回调被调用之前完成?
我正在编写获取数据的代码.首先我调用**getsomedata**
函数来获取数据和里面的getsomedata函数我调用另一个函数getRandomdata来获取数据并将其返回到前一个函数但它返回undefined
.但在getRandomdata
数据中可以看到console.log
.我需要使用callbacks
吗?
router.get('/get-data', function (req, res, next) {
var result = getsomedata(some_parameter);
console.log(result); // receiving undefined
res.send(result);
});
function getsomedata(some_parameter_recieved) {
var getsomedata = getRandomdata(random_params);
console.log(getsomedata); // receiving undefined
return getsomedata;
}
function getRandomdata(random_params_recieved) {
// after some calculation
console.log(random_data); // receiving proper data
return random_data;
}
Run Code Online (Sandbox Code Playgroud) asynccallback ×10
node.js ×7
asynchronous ×5
javascript ×5
callback ×4
arguments ×1
aws-lambda ×1
c# ×1
express ×1
function ×1
jquery ×1