相关疑难解决方法(0)

如何从异步调用返回响应?

我有一个foo发出Ajax请求的函数.我怎样才能从中回复foo

我尝试从success回调中返回值,并将响应分配给函数内部的局部变量并返回该变量,但这些方法都没有实际返回响应.

function foo() {
    var result;

    $.ajax({
        url: '...',
        success: function(response) {
            result = response;
            // return response; // <- I tried that one as well
        }
    });

    return result;
}

var result = foo(); // It always ends up being `undefined`.
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery asynchronous xmlhttprequest

5208
推荐指数
38
解决办法
134万
查看次数

什么是明确的承诺构建反模式,我该如何避免它?

我编写的代码看起来像:

function getStuffDone(param) {           | function getStuffDone(param) {
    var d = Q.defer(); /* or $q.defer */ |     return new Promise(function(resolve, reject) {
    // or = new $.Deferred() etc.        |     // using a promise constructor
    myPromiseFn(param+1)                 |         myPromiseFn(param+1)
    .then(function(val) { /* or .done */ |         .then(function(val) {
        d.resolve(val);                  |             resolve(val);
    }).catch(function(err) { /* .fail */ |         }).catch(function(err) {
        d.reject(err);                   |             reject(err);
    });                                  |         });
    return d.promise; /* or promise() */ |     });
}                                        | }
Run Code Online (Sandbox Code Playgroud)

有人告诉我这个被称为" 延迟反模式 "或" Promise构造函数反模式 ",这个代码有什么不好,为什么这被称为 …

javascript promise q bluebird es6-promise

479
推荐指数
3
解决办法
7万
查看次数

使用带有Ajax调用的SetTimeout

我试图使用setTimeout来检查表中是否存在数据:

如果数据存在则不获取数据.如果数据不存在,则使用load获取数据,然后每隔x分钟执行相同的操作.

这是我到目前为止所拥有的.出于某种原因,setTimeout当它命中If块时不起作用.

我甚至不确定这是否是最好的方法.

    var sTimeOut = setTimeout(function () {
        $.ajax({
            url: 'CheckIfDataExists/' +
                         new Date().getTime(),
            success: function (response) {
                if (response == 'True') {
                    $('.DataDiv')
                      .load('GetFreshData/' + new Date()
                          .getTime(), { "Id": $("#RowID").val() });
                }
            },
            complete: function () {
                clearTimeout(sTimeOut);
            }
        });
    }, 10000);
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

更新 ...

    setTimeout(function(){checkData()}, 5000);
    function checkData(){
    $.ajax({ 
            url: 'CheckIfDataExists/' + 
                             new Date().getTime(),
            success: function (response) {
                if (response == 'True') {                     
                    $('.DataDiv')
                          .load('GetFreshData/' + new Date()
                              .getTime(), { "Id": $("#RowID").val() }); …
Run Code Online (Sandbox Code Playgroud)

javascript jquery asp.net-mvc-3

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

JavaScript - 同步等待异步操作(睡眠)

我知道它在这里被多次询问,很多次回答这不是应该怎么做的方式,而是再一次:)

是否有可能以某种方式调用异步函数(例如timer/ajax调用),基本上是常见的异步任务并同步等到它结束而没有100%的CPU使用率并阻止浏览器?

简单的回答就足够了 - 是或否.如果没有我必须根据"异步方式"中的异步操作编写所有代码,否则,它会更好;)

想象一下:

updateCSS("someurl.css")

function updateCSS(url) {

   var css = getCachedResource(url);

   css = css.replace(/regexp/gm, function(curUrl) {
     base64 = atob(getCachedResource(curUrl))
     return "data:image;base64," + base64
   })

}

function getCachedResource(url) {
  
  //...
  
  if (cached) {
    
    return cached
    
  } else {
    
    // doajax...    
    // watfor
    
    return loaded
  }
  
}
Run Code Online (Sandbox Code Playgroud)

当然,我可以使它异步,但代码将......非常糟糕.而且,我必须使调用此函数的所有函数都异步.你能看到简单的解决方案吗 我会说阻塞是最简单的.

谢谢

javascript asynchronous promise async-await

7
推荐指数
1
解决办法
2975
查看次数

如何在链接两个异步jQuery函数时完全避开jQuery promises?

我见过很多关于新EMCA承诺的教程,主张避免jQuery库中的"promises".他们通常说你可以通过做这样的事情来躲避他们:

Promise.resolve($.getJSON(url, params)); // voila!  the jQuery promise is "gone"!
Run Code Online (Sandbox Code Playgroud)

但是,当我必须将两个异步jQuery函数链接在一起时,这并不真正起作用.如何在不使用jQuery的then()或.when()的情况下将两个getJSON调用(第二个调用依赖于第一个调用)链接在一起?

相反,我只想使用Promise.all等.

我认为一个类似的问题问题是交叉jquery和EMCA的承诺?

javascript jquery promise es6-promise

5
推荐指数
2
解决办法
1021
查看次数

在.each函数中等待$ .ajax结果

我有搜索具有特定类的每个元素的函数:

$("#stepSurveyCtnId .questionCtnClass").each(function () {}
Run Code Online (Sandbox Code Playgroud)

在每个步骤中,我检查一个问题是否是客户类型:

var type = $(this).children().data("question-type");

var isCustomerQuestion = false;

switch (type) {
    case "Name":
    case "Email":
        isCustomerQuestion = true;
        break;
}
Run Code Online (Sandbox Code Playgroud)

如果是客户类型,我从数据库中获取客户表的下一个ID:

  if(isCustomerQuestion) {
      if (customerId == -1) {
          $.ajax({
              method: "POST",
              url: urlCustomerCreate, 
              success: function (ajaxData) {
                  customerId = ajaxData.NumericValue;
              }
          });
      } 
  }
Run Code Online (Sandbox Code Playgroud)

问题是在.each()函数的第二次迭代中,customerId仍然是= -1,例如它应该是1305.

似乎执行不会在$ .ajax调用中停止,或者迭代在同一时间执行,第二次迭代不会从第一次迭代中接收customerId.

javascript jquery

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