我有这个用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,但我认为我做错了。
让我知道这里缺少什么。
答案 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...
});
}