JavaScript Promise 和 this 关键字

JavaScript Promise and the this keyword

本文关键字:关键字 this Promise JavaScript      更新时间:2023-09-26

给定以下JS,如何设置PlateCheck对象的message属性?

var plateCheck = {
        plateNumber: '',
        message: '',
        alertClass: '',
        checkPlate: function (plateNumber) {
            PlateCheckService.checkPlate(plateNumber).then(function (response) {
                var data = response.data;
                if (data.VehicleAtl !== null) {
                    this.message = "Hot!";
                    this.alertClass = 'alert-danger';
                } else {
                    this.message = "Plate #" + data.PlateNumber + " is clean.";
                    this.alertClass = 'alert-success';
                }
            });
        }
    };

编辑

PlateCheckService.checkPlate(plateNumber)返回一个承诺...

这可能只是一个范围问题,但通过调用plateCheck.checkPlate(fooPlateNumber)返回相同的对象,也许这可以解决问题。

var plateCheck = {
        plateNumber: '',
        message: '',
        alertClass: '',
        checkPlate: function (plateNumber) {
            var me = this;
            PlateCheckService.checkPlate(plateNumber).then(function (response) {
                var data = response.data;
                me.plateNumber = plateNumber;
                if (data.VehicleAtl !== null) {
                    me.message = "Hot!";
                    me.alertClass = 'alert-danger';
                } else {
                    me.message = "Plate #" + data.PlateNumber + " is clean.";
                    me.alertClass = 'alert-success';
                }
            });
        }
    };

但也许你可以只提取服务函数,以返回一个plateCheck对象。

function checkPlate(plateNumber) {
    var plateCheck = {};
    plateCheck.plateNumber = plateNumber;
    PlateCheckService.checkPlate(plateNumber).then(function (response) {
        var data = response.data;
        if (data.VehicleAtl !== null) {
            plateCheck.message = "Hot!";
            plateCheck.alertClass = 'alert-danger';
        } else {
            plateCheck.message = "Plate #" + data.PlateNumber + " is clean.";
            plateCheck.alertClass = 'alert-success';
        }
    });
    return plateCheck;
}