标签: callback

node.js 回调被多次调用

我今天刚刚开始使用 node.js 和 Zeromq 绑定,并看到一些我不太理解的行为。

这是我的示例代码,它调用同一台计算机上端口 9000 上的另一个基于 ruby​​ 的 Zeromq REP 进程:

var zeromq = require("zmq");
var http = require('http');

var counter = 0;

var availabilityResponse = function(counter, data, request, response) {
    var str = data.toString('utf-8');
    console.log(str);
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.write(str);
    response.end();                 
}

var zmqSocket = zeromq.createSocket('request');
zmqSocket.connect("tcp://127.0.0.1:9000");


var server = http.createServer()
server.on('request', function(request, response) {
    counter += 1;
    zmqSocket.send("Hola! - This is call # " + counter);
    zmqSocket.on('message', function(data) {
        availabilityResponse(counter, data, request, response);
    });

});
server.listen(8888);
console.log("Starting …
Run Code Online (Sandbox Code Playgroud)

callback zeromq node.js

0
推荐指数
1
解决办法
5390
查看次数

推迟回调直到 setTimeout 完成

我已经到处寻找解决方案,但到目前为止还没有找到任何东西(我可能使用了错误的关键字!如果这是重复的,请指出,我将删除)

你们中的一位杰出的天才能否向我解释一下为什么以下内容不能像人们希望的那样工作?我的意思是回调在回调内完成complete之前被调用,我不太明白为什么。setTimeoutsuccess

$.ajax({
    url: options.url,
    data: options.data,
    success: function(){
        setTimeout(function(){
            console.log('firing');
        },2000);
    },
    dataType: options.dataType,
    complete: function(){
        console.log('ended');   
    }
});
Run Code Online (Sandbox Code Playgroud)

setTimeout是因为回调中已经启动了一个新线程吗success

是否可以在不将回调函数传递到回调中的情况下实现此目的success

javascript jquery callback

0
推荐指数
1
解决办法
585
查看次数

如何使用nodejs获取异步数据

我正在尝试使用nodejs从mysql表中获取数据。我调用另一个节点 js 文件中的 sql 例程。但是,我无法让回调返回数据。我认为问题可能是我从节点 js 文件调用异步例程,而不是从角度或常规 javascript 程序调用异步例程。下面是我正在调用的导出脚本。

exports.getVenueById = function(db, id) {
    var http = require('http');
    var mysql = require('mysql');

    var query = "SELECT *  FROM venues WHERE auto_increment = ? "
    query = mysql.format(query, id);
    console.log("query=" + query);

db.query(
    query,
    function(err, rows) {
        if(err) console.log("error=" + err);
        console.log("rows=" + rows[0]['auto_increment']);
        res.json({success: true, response: rows});
        //return rows[0];
     });

}
Run Code Online (Sandbox Code Playgroud)

我知道这是有效的,因为我正在将结果写入控制台。问题是数据永远不会返回到下面的调用节点 js 例程。

function getVenueData (id , callback)  {             
  (function () {
     venueData = venueTable.getVenueById(db, id);           
     if(venueData) {
         callback(); …
Run Code Online (Sandbox Code Playgroud)

javascript mysql asynchronous callback node.js

0
推荐指数
1
解决办法
835
查看次数

在 before_update 回调中更改属性值

当我检测到已更改且即将更新时,我尝试更改attribute_1值。attribute_2

对象已更新,但设置的attribute_1值并未持续存在,为什么?

before_update :check_attribute2_change

def check_attribute_2_change
  if attribute_2_changed?
      attribute_1 = nil
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails callback ruby-on-rails-4

0
推荐指数
1
解决办法
1753
查看次数

C++ - 如何从同一个类的静态函数访问一个类的私有成员?

我拥有的:

所以我有一个带有私有成员的类和一个静态函数。该函数必须真的是静态的,我无法改变它。

我想要的是:

我需要从静态函数访问私有成员。有任何想法吗?:)

请检查以下代码:

class Base
{
private:
   int m_member;
public:
   Base() : m_member(0) {};
   ~Base() {};

   static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode); /* This must really be static because it is coming from C */
};

void Base::key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
    m_member = 1; // <---- illegal reference to non-static member 'Base::m_member'
}
Run Code Online (Sandbox Code Playgroud)

c++ static class callback

0
推荐指数
1
解决办法
6070
查看次数

javascript 在执行一个函数后做一些事情

我看过很多关于它的帖子,但我仍然不明白回调。我得到了这样的函数:

function getData (url) {
  request(url, function (error, response, data) {
      //...
      return data;
    }
  });
}

var data = getData(url);
// I got undefined because it's not finished
if (data) 
  ...
Run Code Online (Sandbox Code Playgroud)

我如何等待我的函数返回继续。我已经看到很多关于回调和承诺的事情,但在这种情况下如何使用它?例如我看过这篇文章,但我不明白答案。

我正在使用节点js

javascript callback promise

0
推荐指数
1
解决办法
4403
查看次数

为什么不能通过在 javascript 中使用 .push() 直接返回值?

以下面的 flatten 函数为例,为什么我不能return直接在累加器上使用。推()

 function flatten(array){
      return reduce(array,function(accumulator, value){
          if(Array.isArray(value)){
              each(value,function(value1){    
                  return accumulator.push(value1);     //as shown 
                  })
              }else{
                  return accumulator.push(value);      //as shown
                  }  

          },[]); 
      };
Run Code Online (Sandbox Code Playgroud)

相反,我需要在单独的行上返回累加器?

 function flatten(array){
      return reduce(array,function(accumulator, value){
          if(Array.isArray(value)){
              each(value,function(value1){
                  accumulator.push(value1);
                  })
              }else{
                  accumulator.push(value);   
                  }  
            return accumulator             //as shown 
          },[]);  
      };
Run Code Online (Sandbox Code Playgroud)

但是如果使用诸如 .concat() 之类的方法,我将能够使用return它......

javascript callback

0
推荐指数
1
解决办法
738
查看次数

Javascript - 回调的优势

我在理解回调方面有一点问题。我在过去 2 天内阅读了很多内容,我所了解的内容如下(如果我错了,请纠正我):

JavaScript 是一种单线程语言,您可以进行同步和异步编程。同步意味着,每条语句在执行之前等待前一条语句完成。这可能会导致麻烦,因为例如,如果与数据库的连接需要很多时间,则前一个之后的语句必须等待。最后,这是非常糟糕的,这就是为什么最好在 Javascript 中进行异步编程,因为异步代码不必等待,代码可以继续运行,用户不必等待。

异步编程需要回调(高阶函数)。

现在我尝试通过很多教程等编写一个小例子。

function testCallback(a,callback){
    console.log('1.function and given parameter: '+a);
    callback(10);
}    

testCallback(5 , function(x){
    console.log("2.function and given parameter of 1. function: "+x);
});
Run Code Online (Sandbox Code Playgroud)

那正确吗?输出是:

1.function and given parameter: 5
2.function and given parameter of 1. function: 10
Run Code Online (Sandbox Code Playgroud)

我不明白,这段代码有什么好处,因为我认为这仍然会导致麻烦?如果“console.log('1.function and....') 有问题,callback(10) 函数会不会停止?

谢谢你的帮助!

javascript callback node.js

0
推荐指数
1
解决办法
710
查看次数

回调究竟是如何得到它们的参数的?

我无法理解 JavaScript 中的回调如何获取它们的参数。或者换句话说:如何实现一个高阶函数,使其回调接受例如标准errdata参数。

就像在这篇关于异步 JavaScript 的文章中以通常方式使用的回调示例中一样(我知道这是通常的,因为我在 Node.js 中看到的正是这种模式moongose(即用于在 db 中创建数据):

function getData(options, callback) { 
    $.get("example.php", options, function(response) { 
        callback(null, JSON.parse(response)); 
    }, function() { 
        callback(new Error("AJAX request failed!")); 
    }); 
} 

// usage 
getData({name: "John"}, function(err, data) { 
    if(err) { 
        console.log("Error! " + err.toString()) 
    } else { 
        console.log(data); 
    } 
});
Run Code Online (Sandbox Code Playgroud)

回调究竟是如何得到的参数errdata基于怎样getData()的功能上面声明?

javascript asynchronous callback parameter-passing

0
推荐指数
1
解决办法
67
查看次数

在 C++ 中使用 RegisterWaitForSingleObject 将参数传递给回调函数

我正在尝试制作一个程序,通过给定的进程 ID 检测进程终止。但是我不能给回调函数提供任何参数。我怎样才能做到这一点?谢谢。

void CALLBACK WaitOrTimerCallback(
     _In_  PVOID lpParameter, 
     _In_  BOOLEAN TimerOrWaitFired,
     DWORD processID)   
{   
    MessageBox(0, L"The process has exited.", L"INFO", MB_OK);  
    std::cout << processID << std::endl;  
    return;  
}  

int main()  
{  
    DWORD dwProcessID = 1234;  
    HANDLE hProcHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
    HANDLE hNewHandle;  
    RegisterWaitForSingleObject(&hNewHandle, hProcHandle, WaitOrTimerCallback(?, ?, dwProcessID), NULL, INFINITE, WT_EXECUTEONLYONCE);  
}
Run Code Online (Sandbox Code Playgroud)

c++ winapi process callback

0
推荐指数
1
解决办法
870
查看次数