嵌套的 getJSON 调用

nested getJSON calls

所以..我是这个 Javascript 的新手并且正在使用 JSON。我正在开发一个网页,在这种情况下需要评论,然后是当前用户名。

为了开发这个,我尝试创建一个 returns 用户名的函数,使用 getJSON() 方法,但显然这是行不通的。我想到的是使用嵌套的 getJSON 调用。

像这样:

$.getJSON(getCommentsURL, function(jsonComments){
    $.getJSON(getUsernameURL, function(username){
        jsonComments[0].deleteButton = (jsonComments[0].username === username)
        // programming logic
    });
});

主要是,我需要这两个信息的原因在代码示例的第 3 行中有所描述。

我的问题是,按照惯例,这种实现是否可以接受?它确实有效,但可能有更合适的方法来执行此实现。我关心约定和适当的方法来做到这一点的原因不仅是为了我自己的知识,而且因为这是一项要求代码干净和正确的学校作业(不仅是它有效)。

非常感谢任何答案。

问题中的方法应该 return 预期结果,您也可以使用 .then()。您还可以将 .fail().catch() 链接到 .then() 以处理错误。注意 return .then()

中的语句
$.getJSON(getCommentsURL)
.then(function(jsonComments) {
    return $.getJSON(getUsernameURL)
           .then(function(username){
             jsonComments[0]
             .deleteButton = (jsonComments[0].username === username)
             // programming logic
           });
})
.fail(function(jqxhr, textStatus, errorThrown) {
  console.log(errorThrown)
})

这是一个很好的用例,可以使用 jQuery 对 Promise.all - $.when 的回答。

var commentsPromise = $.getJSON(getCommentsURL);
var usernamePromise = $.getJSON(getUsernameURL);

// when both requests complete
$.when(commentsPromise, usernamePromise).then(function(jsonComments, username) {
  jsonComments[0].deleteButton = (jsonComments[0].username === username)
  // programming logic
});