Javascript承诺/然后失去范围

时间:2013-04-11 15:39:12

标签: javascript backbone.js jquery-deferred promise q

谁能告诉我这里我做错了什么?

我有一个承诺,即在返回结果时失去局部变量范围。

延迟调用结束时我需要可用的id值:

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

1 个答案:

答案 0 :(得分:0)

您是否期望通过致电result返回getChildren()

如果是,那么(假设service.getChildren()返回jQuery Promise),代码需要稍微修改,以便.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以外的其他内容,则必须提供{{1}}。