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

Not able to sync the flow properly in angularJS while using promises

本文关键字:同步 angularJS promise      更新时间:2023-09-26

我用AngularJS编写了这段代码。我无法同步此。我想在达到if条件之前解析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.dedefer,但我觉得我做错了什么。

让我知道这里缺了什么。

Promises不会神奇地使异步代码同步。它们仍然是异步的,并且使用回调。在您的情况下,myData永远不会是布尔值,因为它是异步获取的,但您可以获得它的promise。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...
    });
}