2013-04-11 157 views
1

任何人都可以告訴我我在做什麼錯嗎?

我有一個承諾,即返回結果時丟失局部變量作用域。

我需要的id值時可用的遞延調用完成:Javascript承諾/然後丟失範圍

getChildren:function(id){ 
    service.getChildren(id) 
    .then(function(result){ 
     var parentId = id //null 
     return result 
    }) 
    .fail(function (error) { 
     log.error(error); 
    }) 
} 
+1

單獨的代碼片段看起來是正確的。沒有更多的信息,我懷疑我們將能夠幫助你。一個http://www.jsfiddle.net/演示將會很棒。 – 2013-04-11 15:41:29

+0

似乎工作http://jsfiddle.net/nikoshr/qUHze/ – nikoshr 2013-04-11 15:43:01

回答

0

你期待result從到getChildren()調用返回?

如果是的話(假設service.getChildren()返回一個jQuery無極),代碼需要稍微修改的,使得.getChildren()返回遞送result以後的承諾

這是可以實現如下:

getChildren:function(id) { 
    return service.getChildren(id).done(function(result) { 
     //here do something generic with `result` 
    }).fail(function (error) { 
     log.error(error); 
    }); 
} 

而且.getChildren()可能被稱爲如下:

myObj.getChildren(myID).done(function(result) { 
    //here do something specific with `result` 
}); 

注意:.then()的額外功率在這裏似乎不是必需的,但如果您希望承諾交付除result以外的其他東西,則這將是必需的。