fix(app): parse response with null body (#4654)

* fix(app): parse response with null body

* style(docker): add comment explaining change

* fix(images): show correct error when failing import

* fix(images): use async await
pull/4444/merge
Chaim Lev-Ari 2021-06-11 03:05:54 +03:00 committed by GitHub
parent f674573cdf
commit 0b85684168
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 88 additions and 88 deletions

View File

@ -18,6 +18,10 @@ function isJSON(jsonString) {
// This handler wrap the JSON objects in an array.
// Used by the API in: Image push, Image create, Events query.
export function jsonObjectsToArrayHandler(data) {
// catching empty data helps the function not to fail and prevents unwanted error message to user.
if (!data) {
return [];
}
var str = '[' + data.replace(/\n/g, ' ').replace(/\}\s*\{/g, '}, {') + ']';
return angular.fromJson(str);
}

View File

@ -1,11 +1,6 @@
angular.module('portainer.docker').controller('BuildImageController', [
'$scope',
'$window',
'ModalService',
'BuildService',
'Notifications',
'HttpRequestHelper',
function ($scope, $window, ModalService, BuildService, Notifications, HttpRequestHelper) {
angular.module('portainer.docker').controller('BuildImageController', BuildImageController);
function BuildImageController($scope, $async, $window, ModalService, BuildService, Notifications, HttpRequestHelper) {
$scope.state = {
BuildType: 'editor',
actionInProgress: false,
@ -52,7 +47,10 @@ angular.module('portainer.docker').controller('BuildImageController', [
}
}
$scope.buildImage = function () {
$scope.buildImage = buildImage;
async function buildImage() {
return $async(async () => {
var buildType = $scope.state.BuildType;
if (buildType === 'editor' && $scope.formValues.DockerFileContent === '') {
@ -71,24 +69,23 @@ angular.module('portainer.docker').controller('BuildImageController', [
var nodeName = $scope.formValues.NodeName;
HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);
buildImageBasedOnBuildType(buildType, imageNames)
.then(function success(data) {
try {
const data = await buildImageBasedOnBuildType(buildType, imageNames);
$scope.buildLogs = data.buildLogs;
$scope.state.activeTab = 1;
if (data.hasError) {
Notifications.error('An error occured during build', { msg: 'Please check build logs output' });
Notifications.error('An error occurred during build', { msg: 'Please check build logs output' });
} else {
Notifications.success('Image successfully built');
$scope.state.isEditorDirty = false;
}
})
.catch(function error(err) {
} catch (err) {
Notifications.error('Failure', err, 'Unable to build image');
})
.finally(function final() {
} finally {
$scope.state.actionInProgress = false;
}
});
};
}
$scope.validImageNames = function () {
for (var i = 0; i < $scope.formValues.ImageNames.length; i++) {
@ -110,5 +107,4 @@ angular.module('portainer.docker').controller('BuildImageController', [
return ModalService.confirmWebEditorDiscard();
}
};
},
]);
}

View File

@ -25,7 +25,7 @@ angular.module('portainer.docker').controller('ImportImageController', [
Notifications.success('Images successfully uploaded');
})
.catch(function error(err) {
Notifications.error('Failure', err.message, 'Unable to upload image');
Notifications.error('Failure', err, 'Unable to upload image');
})
.finally(function final() {
$scope.state.actionInProgress = false;