【问题标题】:Possibly unhandled rejection可能未处理的拒绝
【发布时间】:2017-09-20 05:57:32
【问题描述】:

我正在尝试使用json-data 调用PUT-方法。但是当我点击我的toggle_save() 按钮修改数据时,我得到404 error 和未处理的拒绝。

HTML:

<div ng-show="contact" id="contacts_edit()">
<div>
 <button class="btn btn-secondary" ng-hide="editMode" ng-click="toggle_edit()"> Edit </button>
 <button class="btn btn-success" ng-show="editMode" ng-click="toggle_save(cts.selectedcontact)"> Save </button>         
</div>

<b> Street:</b> 
    <p ng-hide="editMode">      
    {{cts.selectedcontact.location.street}} 
  </p>
<input type="text" ng-show="editMode" ng-model="cts.selectedcontact.location.street"><br/>

AngularJS:

$scope.toggle_save = function(contacts, id) {
  $scope.selectedcontact = [];

  $http({
    method: 'PUT',
    url: 'http://localhost:3000/contacts/' + contacts.editmode,
    data: {
      selectedcontact: contacts.selectedcontact
    }
  }).then(function(data) {
    console.log(data)
    $scope.cts.selectedcontact = data;
  })
}

【问题讨论】:

  • 好吧,您在调用 $http({ 时没有处理任何错误,所以,是的,会出现未处理的拒绝

标签: javascript html angularjs


【解决方案1】:

您可以在 catch 块中处理未处理的拒绝。由于 API 调用中的一些错误,您的 API 失败。确保联系人数据及其属性正确。

HTML

<button class="btn btn-success" ng-show="editMode" ng-click="toggle_save(cts.selectedcontact)"> Save </button> 

JS

 $scope.toggle_save = function(contacts) {
    $scope.selectedcontact = [];
    $http({
        method: 'PUT',
        url: 'http://localhost:3000/contacts/' + contacts.editmode,
        data: {
            selectedcontact: contacts.selectedcontact
        }
    }).then(function(data) {
        console.log(data)
        $scope.cts.selectedcontact = data.data;
    }).catch(function(data) {
       //handle rejections here
    });
}

【讨论】:

  • cts 是控制器的别名,我将值分配给 selectedcontact 对象 @Vivz
  • 但是作为函数参数存在的 id 是什么?而且您将 $scope 和 cts 混合在一起,这是一种不好的做法。使用 $scope 或控​​制器作为,而不是两者。
  • 你的后端有什么用? Put Url 是否正确?
  • 你使用的是什么版本的 angularjs? contacts.editmode 和 contacts.selectedcontact 包含正确的值?
  • 我使用的是 Angular 1.6 版本
【解决方案2】:

404 错误即将到来,因为 API 无法访问 URL。 最简单的测试方法是在浏览器中复制和粘贴 URL。
未处理的拒绝可以通过在 .then() 之后放置 .catch() 来解决。拒绝将作为参数传递给它。您可以安慰或采取适当的行动。

 $scope.toggle_save = function(contacts) {
    $scope.selectedcontact = [];
        $http({
            method: 'PUT',
            url: 'http://localhost:3000/contacts/' + contacts.editmode,
            data: {
                selectedcontact: contacts.selectedcontact
            }
        }).then(function(data) {
            console.log(data)
            $scope.cts.selectedcontact = data.data;
        }).catch(function(data) {
           //handle rejections here
        });
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-24
    • 2017-11-02
    • 2017-05-07
    • 2018-02-27
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2023-01-04
    相关资源
    最近更新 更多