首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包含多个嵌套jQuery的.when。返回未定义

包含多个嵌套jQuery的.when。返回未定义
EN

Stack Overflow用户
提问于 2014-12-05 23:12:03
回答 2查看 223关注 0票数 0

带有多个嵌套jQuery的.when不能正确返回。由于未定义变量而获得错误"Uncaught :意外令牌u“。

下面是我的代码和流程。

将在按钮单击事件中调用此方法,该按钮在内部调用具有依赖关系的多个方法。在下面的示例中,流是masterProcess->buildAndroidApk->unlockAndroidKey

代码语言:javascript
运行
复制
function masterProcess(thisForm){
  $.when(buildAndroidApk()).then(function(result){
    obj = JSON.parse(result);

  });
}

function buildAndroidApk(){
  $.when(unlockAndroidKey()).then(function(result){
    obj = JSON.parse(result);

    //There are some other .when based on the obj response

    return result;
  });
}

function unlockAndroidKey(){
  //this function connects to server via jQuery Ajax and gets a json string inside success or error block
  return '{"success":"1","message":"","content":null}';
}

函数unlockAndroidKey获得json字符串,我可以在buildAndroidApk中接收该字符串。但是masterProcess正在接收一个未定义的字符串,JSON.parse会导致错误“意外令牌u”。

我不知道我是否清楚地解释了我的问题,但如果需要,我可以更详细地解释。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-05 23:17:36

您的代码没有显示任何异步操作,因此我们甚至无法帮助您完成实际的异步代码。这就是我们需要看到的,以帮助你。

各种问题:

  1. $.when()必须通过一个或多个承诺
  2. 如果您只有一个承诺等待,则根本不需要$.when(),因为您可以直接在单个承诺上使用.then()
  3. buildAndroidApk()unlockAndroidKey()必须兑现承诺
  4. 您试图返回的测试JSON字符串中有语法错误(引用错误)
  5. 如果您正在使用jQuery,并且从您的服务器获得JSON,jQuery将自动为您解析它--您不需要手动解析它。

要使代码按照结构化的方式工作,buildAndroidApk()unlockAndroidKey()都必须返回承诺。现在,在这两个函数中,您都没有显示出承诺的返回。因此,当您尝试对返回值使用.then()时,它将无法工作。或者,当您试图将其传递给$.when()时,没有承诺要等待。

$.when()需要将一个或多个承诺传递给它。您的buildAndroidApk()方法不返回承诺,因此您将未定义的消息传递给$.when(),因此在调用其.then()处理程序之前,它没有等待的承诺。

此外,除非您有多个承诺,否则没有理由使用$.when()

您并没有向我们展示代码的实际异步部分,因此向您展示如何实际修复代码有点困难,但总体思路如下:

代码语言:javascript
运行
复制
function masterProcess(thisForm){
  buildAndroidApk().then(function(result){
    obj = JSON.parse(result);
    // use obj here
  });
}

function buildAndroidApk(){
  return unlockAndroidKey().then(function(result){
    obj = JSON.parse(result);

    //There are some other .when based on the obj response

    return result;
  });
}

function unlockAndroidKey(){
  //this function connects to server via jQuery Ajax and gets a json string inside success or error block
  return $.ajax(...).then(function(data) {
       return something;
  });
}
票数 1
EN

Stack Overflow用户

发布于 2014-12-05 23:16:59

我自己找到了答案。我把返回放在$.when之前,它运行得很好。

代码语言:javascript
运行
复制
function buildAndroidApk(){
  return $.when(unlockAndroidKey()).then(function(result){
    obj = JSON.parse(result);

    //There are some other .when based on the obj response

    return result;
  });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27326188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档