2014-02-06 54 views
2

我正在阅读有关承诺的博客文章,我发现这个代码,我不知道这是如何工作的?JavaScript中的两个返回值是什么意思?

function getPost(id) { 
    return $.getJSON('/posts/'+ id).then(function(data, status, xhr) { 
     return data; 
    }); 
} 

当我尝试这种功能,它总是返回我一个承诺这是$.getJSON默认值,但什么是第二return data;是什么意思?

由于

回答

5

第二个return属于为.then()方法定义的匿名回调方法。如果您更改格式的东西不太规范,它会更容易想象:

function getPost(id) { 
    return $.getJSON('/posts/'+ id).then(
     function(data, status, xhr) { 
      return data; 
     } 
    ); 
} 

如果完全尼克斯的匿名函数,那么它会是这个样子:

function jsonCallback(data, status, xhr) { 
    return data; 
} 

function getPost(id) { 
    return $.getJSON('/posts/'+ id).then(jsonCallback);  
} 

通常情况下,一些像这样只会在您的问题中设置,但将它们分开可以使初学者更容易看到。

基本上,我们可以假设.then()方法采用另一个函数作为参数(上面的匿名方法/ jsonCallback)。内,它可能有(或至少要求)一些代码,看起来是这样的:

function then(callback) { 
    if(callback && typeof(callback) === typeof(Function) { 
     callback(data, status, xhr); // data, status, and xhr are probably defined eslewhere in the object 
    } 
} 

这绝对是jQuery的deferred.then()方法过于简单的例子,但你的想法。

+1

为什么downvote?我很乐意提高我的答案。 – valverij

0

getPost方法返回的getJSON返回的结果,并传递给then闭合返回data

0

仔细查看返回语句的范围。一个返回来自匿名函数的回调数据,该函数返回函数的所有数据。

2

语句return data;是传递给then方法的函数文本的一部分。它不会立即执行。

这里的时间表:

  1. getPost返回的方法$.getJSONthen链,这是一种无极对象的结果。
  2. $.getJSON发起的AJAX调用完成时,调用传递给then的函数。这个功能被称为回调。
  3. 最后,执行回调函数,这就是return data;实际运行的时间。
0

所以,如果你看一下$.getJSON('/posts/' + id)你会发现,返回的对象调用该则方法是说,如果当有一个名为然后在它和该函数内的方法是将下面的代码

function (a,b,c){i.done(a).fail(b).progress(c);return this} 

所以对这个getJSON方法的调用会成功返回,然后让我们继续并运行此函数。那就是当时方法的i.done(a)部分。因此,例如,可以说你跑

$.getJSON('/apicall').then(function() {alert ("Success");}) 

当跑会提醒到浏览器的成功,只是如果你运行

$.getJSON('/apicall').then(function() {alert ("Success");}).done(function() {alert("DONE");}) 

一样,那么你会得到警告成功然后得到提醒做,因为api调用完成。此外,如果你看看$.getJSON电话,你会发现下面是该方法

function (a,b,c){return f.get(a,b,c,"json")} 

所以,如果您在控制台中运行,现在

$.get('/asdf').then(function() { alert("Success");}).done(function() { alert("Done");}) 

您将能够明白我的意思。就返回数据语句而言,它返回检索到的数据json数据。然而,它并没有回到任何奇怪的地方。因此,如果您打电话给getPost,那么它不会返回任何内容。

相关问题