我希望能夠鏈接承諾,以使代碼同步。我的問題是,根據第一個$ http請求的結果,我可能想要發送另一個或不。 如果我選擇不發送另一個$ http請求,我不需要我的第二個then()
來做任何事情。但由於我的第二個then()
不知道這一切,它仍然掛在那裏,所以我想我需要從第一個回來,然後一些假虛擬承諾。但是我還想在第二時間()中認識到這種情況。我想出了從第一種情況返回$ q.when('一些值')。下面是代碼:如何從.then返回承諾
$http.get(url, params)
.then(function(res) {
res = res.data;
if (res.status == 'ok' && res.rows.length > 0) {
$scope.roomTypes = res.rows;
return $q.when({ isDummy: true }); //in this case I don't need to send another request
} else if (res.rows.length === 0 && $scope.request.roomType) {
return $http.get(url2, params2); //make second request and return then`able promise
}
}, function(res) {
throw 'Error';
})
.then(function(res) {
res = res.data;
if (res.status == 'ok') {
var roomType = {
room_type: res.roomType.id,
description: res.roomType.description
};
$scope.roomTypes.push(roomType);
} else if (res.isDummy) {
//ok that's our dummy promise
} else {
//format of response unexpected it means something went wrong
throw "error";
}
}, funcrtion(res) {
throw "some Error";
})
.catch(function(res) {...})
.finally(function() {...});
是我希望看到與承諾就解決了價值的東西({isDummy:真}),但我怎麼做呢?我在res
參數中獲得undefined
。
有一個在你的代碼一個錯字:'funcrtion' – rmorrin