标签: synchronous

在javascript中异步或同步调用事件处理程序

事件处理程序是在JavaScript中同步还是异步执行的?这是JS bin,它显示了事件处理程序是同步执行的.

码:

$('#toclick').bind('custom', function() {
    for (var i=0; i<100000; i++) {}
    console.log('Inside click handler');
});

$('#toclick').trigger('custom');
console.log('Outside click handler');

Output:
Inside click handler
Outside click handler
Run Code Online (Sandbox Code Playgroud)

这意味着如果我们触发事件,除非执行所有事件处理程序,否则不会执行它下面的代码.我对吗 ?

Bin有多个事件处理程序

javascript jquery asynchronous event-handling synchronous

18
推荐指数
2
解决办法
1万
查看次数

如何使Meteor方法同步?

我需要一种方法使流星调用同步,以便在运行调用时代码等待结果完成,以便它可以继续到客户端上的下一行代码.

例如:

clientFunction = function(){

    Meteor.call('serverFunction', function(err,result){})//<--so when this gets a result and    
                                                    //is stored in a session variable
    var doSomeThing = Session.get('whatever') <-- so that your able to use it here
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试做一个while循环来防止任何事情发生,直到返回一个值,但似乎它在clientFunction之后运行,从而将其抛给它的死亡

任何帮助都会被贬低

methods synchronization call synchronous meteor

17
推荐指数
1
解决办法
2万
查看次数

Nodejs同步对于每个循环

我想为每个循环做一个但是让它同步运行.循环的每次迭代都将执行一次http.get调用,并返回json,以便将值插入数据库.问题是for循环以异步方式运行,导致所有http.gets都立即运行,我的数据库最终没有插入所有数据.我正在使用async-foreach尝试做我想做的事情它可以做,但如果我能以正确的方式做到这一点,我就不必使用它.

mCardImport = require('m_cardImport.js');
var http = require('http');
app.get('/path/hi', function(req, res) {

mCardImport.getList(function(sets) {
  forEach(sets, function(item, index, arr) {
    theUrl = 'http://' + sets.set_code + '.json';
    http.get(theUrl, function(res) {

      var jsonData = '';
      res.on('data', function(chunk) {
        jsonData += chunk;
      });

      res.on('end', function() {
        var theResponse = JSON.parse(jsonData);
        mCardImport.importResponse(theResponse.list, theResponse.code, function(theSet) {
          console.log("SET: " + theSet);
        });
      });
    });
  });
});
});
Run Code Online (Sandbox Code Playgroud)

和我的模特

exports.importResponse = function(cardList, setCode, callback) {

mysqlLib.getConnection(function(err, connection) {

forEach(cardList, function(item, index, arr) {

  var theSql = "INSERT …
Run Code Online (Sandbox Code Playgroud)

javascript mysql synchronous node.js

17
推荐指数
3
解决办法
4万
查看次数

Chrome和其他浏览器是否会放弃对Synchronous XMLHttpRequest的支持?

同步XMLHttpRequest已被弃用,这意味着最终将删除对它的支持,这是我在Chrome中收到的消息:

主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用.如需更多帮助,请访问http://xhr.spec.whatwg.org/.

所以,我的问题是,如果是,如果是的话,主流浏览器(特别是Chrome)何时会放弃对同步XMLHttpRequest的支持?

browser google-chrome xmlhttprequest synchronous deprecated

17
推荐指数
1
解决办法
5010
查看次数

jquery - 同步提交帖子(不是ajax)

我有一个页面(page 1)接受发布请求,做一些事情并在最后显示一些数据.

从另一个页面(page 2),我想重定向到page 1单击按钮时,当然发送page 1通过POST 所需的所有相关数据.

当然,我可以使用在页面上有一个不可见形式的旧hack,在用户点击按钮之后填入我需要的所有数据,然后自动提交().但这看起来很麻烦 - 使用类似的语法更好$.post,而不是开始操纵html.$.post它是完美的,它实际上是重定向到页面而不是异步地发出请求(我不能只是page 1在ajaxy帖子完成后重定向到page 1需要数据显示的东西).

有没有办法用jquery做我想要的东西,或者丑陋的隐形形式是唯一的出路?

PS

我知道还有其他复杂的方法可以实现我想要的东西,例如$.post在我们当前使用的页面中使用和只是种植响应的html,但我只是想知道是否有一种直接的方式来实现这一点与jquery

jquery post synchronous

16
推荐指数
3
解决办法
1万
查看次数

C#具有异步函数调用同步函数或同步函数调用异步函数

我正在编写一个C#.Net 4.5库,用于执行常见的SQL数据库操作(备份,恢复,执行脚本等).我希望每个操作都有同步和异步函数,因为这个库将由控制台和GUI应用程序使用,但我不想在任何地方重复代码.所以我看到它,我有两个选择:

  1. 编写在同步函数中执行工作的代码,然后将其包装在async函数的任务中,如下所示:

    public void BackupDB(string server, string db)  
    {  
        // Do all of the work and long running operation here  
    }
    
    public async Task BackupDBAsync(string server, string db)  
    {  
        await Task.Factory.StartNew(() => BackupDB(server, db)).ConfigureAwait(false);  
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 编写在异步函数中执行工作的代码,并使用.Wait()从同步函数中调用它:

    public async Task BackupDBAsync(string server, string db)  
    {  
        // Do all of the work and long running operation here, asynchronously.  
    }
    
    public void BackupDB(string server, string db)  
    {  
        BackupDBAsync(server, db).Wait(); // Execution will wait here until async function finishes completely.  
    }
    
    Run Code Online (Sandbox Code Playgroud)

一种选择比另一种更好吗?这是一个最佳实践吗?或者还有其他(更好的)替代方案吗?

我知道使用.Wait()的一个警告是async函数中的所有await语句都必须使用.ConfigureAwait(false)来避免死锁( …

c# asynchronous synchronous async-await .net-4.5

16
推荐指数
1
解决办法
1万
查看次数

如何理解JMS中的"同步"和"异步"消息?

阅读JMS的一些文件后,我完全被这句话不解synchronousasynchronouns.

见此页:http://docs.oracle.com/cd/E19798-01/821-1841/bncdq/index.html

同步

您使用receive方法同步使用消息.您可以在调用start方法后随时使用此方法:

connection.start();
Message m = consumer.receive();
connection.start();
Message m = consumer.receive(1000); // time out after a second
Run Code Online (Sandbox Code Playgroud)

要异步使用消息,请使用消息侦听器,如下一节所述.

异步

JMS消息侦听器消息侦听器是一个对象,充当消息的异步事件处理程序.此对象实现MessageListener接口,该接口包含一个onMessage方法.在onMessage方法中,您可以定义消息到达时要执行的操作.

使用setMessageListener方法向特定的MessageConsumer注册消息侦听器.例如,如果定义一个名为Listener的类来实现MessageListener接口,则可以按如下方式注册消息监听器:

Listener myListener = new Listener();
consumer.setMessageListener(myListener);
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 据我所知,JMS的本质是异步的.生产者将消息发布到队列/主题,它不需要等待消费者.这是异步行为.怎么会"同步"?

  2. 如果"mesageListener"是异步的,但在我使用spring-jms的测试中,我发现它总是在一个线程中运行.这意味着,如果我写Thread.sleep(2000)onMessage,它具有处理下一条消息之前是等待2秒.它是"异步"吗?

java asynchronous jms synchronous

16
推荐指数
3
解决办法
2万
查看次数

FileReader()的Javascript承诺

我有以下HTML代码:

<input type='file' multiple>
Run Code Online (Sandbox Code Playgroud)

这是我的JS代码:

var inputFiles = document.getElementsByTagName("input")[0];
inputFiles.onchange = function(){
    var fr = new FileReader();
    for(var i = 0; i < inputFiles.files.length; i++){
        fr.onload = function(){
            console.log(i) // Prints "0, 3, 2, 1" in case of 4 chosen files
        }
    }
    fr.readAsDataURL(inputFiles.files[i]);
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何使这个循环同步?首先等待文件完成加载然后转到下一个文件.有人告诉我使用__CODE__.但我不能让它发挥作用.这是我正在尝试的:

var inputFiles = document.getElementsByTagName("input")[0];
inputFiles.onchange = function(){
    for(var i = 0; i < inputFiles.files.length; i++){
        var fr = new FileReader();
        var test = new Promise(function(resolve, reject){
            console.log(i) // Prints 0, …
Run Code Online (Sandbox Code Playgroud)

javascript synchronous filereader promise

16
推荐指数
4
解决办法
3万
查看次数

同步Ajax - Chrome在可信事件上是否超时?

情况

我们有一种情况,我们需要在执行XHR/Ajax请求后在浏览器中打开一个新选项卡.

我们通过将Ajax请求设置为同步执行以保持受信任的click事件的上下文来实现此目的,这样可以正常工作.

问题

但是,在最新的Chrome版本(36)中,当Ajax调用有一些延迟时,我们会遇到弹出警告... 2秒的延迟足以让Chrome显示弹出警告,而不是像预期的那样打开标签.代码本身正常工作,我可以多次单击该按钮,它一直有效,直到请求遇到一些延迟.然后我得到弹出警告......

是否存在应用于同步Ajax请求的超时,在此期间需要完成它以使可信事件仍然可用?

有没有办法规避这个?毕竟,呼叫已经同步并冻结其他所有内容,直到结果到来.

谢谢.

更新JSFiddle

更新:我已经创建了一个JSFiddle来演示这个问题:http://jsfiddle.net/23JNw/9/

/**
* This method will give open the popup without a warning.
*/
function performSlowSyncronousRequest() {
    $.ajax({
     url: '/echo/html',
     data: {delay: 2}, //JSfiddle will delay the answer by 2 seconds
     success: function(){
         window.open('http://www.thirtykingdoms.com'); //this causes the popup warning in Chrome
     },
     async: false
    });
}
Run Code Online (Sandbox Code Playgroud)

javascript ajax google-chrome popup synchronous

15
推荐指数
1
解决办法
7327
查看次数

如何在node.js中使用带有Express的Promise?

我正在使用Promise和Express.

router.post('/Registration', function(req, res) {
  var Promise = require('promise');
  var errorsArr = [];
  function username() {
    console.log("1");
    return new Promise(function(resolve, reject) {
      User.findOne({ username: req.body.username }, function(err, user) {
        if(err) {
          reject(err)
        } else {
          console.log("2");
          errorsArr.push({ msg: "Username already been taken." });
          resolve(errorsArr);
        }
      });
    });
  }
  var username = username();
  console.log(errorsArr);
});
Run Code Online (Sandbox Code Playgroud)

当我记录时errorsArray,它是空的,我不知道为什么.我是node.js的新手.提前致谢.

synchronous mongoose node.js promise express

15
推荐指数
1
解决办法
4万
查看次数