使用promises时无法在angularJS中正确同步流

时间:2014-09-17 12:37:34

标签: javascript angularjs promise angular-promise

我有这个用AngularJS编写的代码。我无法同步这个。我想在达到条件之前解析myData值。但是我的代码流程仍在继续,并且它不会进入“IF”状态,因为此时myData是一个promise函数。

function() {
    var dfd = $q.defer();

var myData = false; 
var myData = restResource.get(itemId).queryOptions(options).promise().then(function(dataItem1) {
    return restResource.oneAction(dataItem1.elements).then(function(dataItem2) {
        var i;
        if (dataItem2.items.length > 0) {
            dfd.resolve(true);
            return dfd.promise;
        }
    });
});

if(myData === true) {
    dfd.resolve(item.attributes);
    return dfd.promise;
}

//Another Resource call... code continues...
}

我也尝试使用$ q.defer,但我认为我做错了。

让我知道这里缺少什么。

1 个答案:

答案 0 :(得分:1)

Promise不会神奇地使异步代码同步。它们仍然是asynchronous and use callbacks。在你的情况下,myData永远不会是一个布尔值,因为它是异步获得的 - 但你可以得到它的承诺。 if语句必须进入回调。

function() {
    return restResource.get(itemId).queryOptions(options).promise()
    .then(function(dataItem1) {
        return restResource.oneAction(dataItem1.elements);
    }) // here we can unnest!
    .then(function(dataItem2) {
        var myData;
        if (dataItem2.items.length > 0) {
            myData = true
            // item.attributes;
        }

        //Another Resource call... code continues...
    });
}