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

Javascript 使用promises时无法在angularJS中正确同步流,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,我用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

我用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.defer,但我认为我做错了什么


让我知道这里缺少什么。

承诺不会神奇地使异步代码同步。他们仍然是。在您的例子中,
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...
    });
}

您需要将if条件放入
然后
回调中。如果您试图解决多个承诺,请检查标题中的拼写错误:porpery->property