2020-10-13前端获取的数据始终和后台发来的数据不太一致(布尔值)
记一些遇到的乱七八糟的东西,万一以后遇到要用呢。find / -name ‘*logf’find . -name testmvn install -Ddockerfile.skip=true -Dmaven.test.skip=true -Xmvn compile/clean/test/test-compile/site/package/install@NotEmpty 集合上面使用@NotBla
记一些遇到的乱七八糟的东西。
find / -name ‘*logf’
find . -name test
mvn install -Ddockerfile.skip=true -Dmaven.test.skip=true -X
mvn compile/clean/test/test-compile/site/package/install
@NotEmpty 集合上面使用
@NotBlank 用在String上面
@NotNull 基本数据类型
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。https://mybatis.plus/guide/
@TableLogit 逻辑删除(实体类字段上加的注解)
@TableField(fill=FieldFill.INSERT) /DEFAULT/UPDATE/INSERT_UPDATE
CICD 持续集成-交付-部署
幂等(idempotent)方法:无论调用多少次,结果都是一样的(任意多次执行所产生的影响均与一次执行的影响相同)。例如,查询、删除操作(返回结果可能不同)就是天然幂等性操作。
List<User> users = userService.getAppActByRoomId(roomId);
//把user List中的userId取出来放在set集合里面
Set<String> userIds = users.stream().map(User::getId).collect(Collectors.toSet());
// 多使用java JDK8以后出现的工具类,简化代码
List<String> list = StrUtil.splitTrim(cancelDest, ","); // cancelDest是一个字符串,eg:001,002,003
list.remove(userId); // return boolean,在list里面去掉useerId这个元素
CollUtil.join(list, ","); // 把list转成用“,”连接的String
// 判断不为空的 传统写法
if(str != null && str.length() != 0) {}
if(str != null && str.equals("")) {}
// 采用工具类
if(StringUtils.isNotBlank(str)) {} // lang3,判断了不为null,不为空
if(StrUtil.isNotBlank(str)) {} // cn.hutool.core.util.StrUtil
roomInfoService.lambdaUpdate.eq(RoomInfo::getId, roomId)
.set(RoomInfo::getCancelDest, CollUtil.join(list, ",") //list->String
.update();
roomInfoService.lambdaQuery.eq(RoomInfo::getId, roomId)
.list(); // .one()
react-bootstrap-table:http://allenfang.github.io/react-bootstrap-table/docs.html#dataFormat
记一次报错:前端获取的数据始终和后台发来的数据不太一致
所谓不太一致呢,是因为其他字段的数据都是正确的,只有布尔值显示的都是false,很神奇的一件事…
看看原来的代码:
// [resFlg, resData] = await IcApiUtils.fetchAutoResMaster();
static async fetchAutoResMaster() {
let path = `/v1/api/autores`;
return this.async_request("GET", path, {});
}
static async async_request(method, path, sendData) {
let gearUrl = this.gearUrl();
let contents;
if (method == "GET") {
contents = {
type: method,
headers: { "X-DMC-CSRF-TOKEN": this.getCsrfToken() },
url: gearUrl + path,
data: sendData,
async: true,
};
} else if (method == "POST" || method == "PUT" || method == "DELETE") {
contents = {
type: method,
headers: { "X-DMC-CSRF-TOKEN": this.getCsrfToken() },
url: gearUrl + path,
data: JSON.stringify(sendData),
contentType: "application/json",
async: true,
};
}
if (path.indexOf("user/login") > -1) {
delete contents.headers;
}
let statusCode;
let resData, errData;
let ajaxRes;
let defer = $.Deferred();
contents.success = defer.resolve;
contents.error = defer.reject;
$.ajax(contents);
try {
ajaxRes = await defer.promise();
console.log(ajaxRes); // 打印的东西如下图,数据是错误的
console.log(JSON.parse(JSON.stringify(ajaxRes))); // 打印的数据是正确的
console.log(JSON.stringify(ajaxRes));
// 200番を成功値とする
statusCode = "200";
} catch (e) {
console.log("Catch *** status:" + e.status);
errData = e;
statusCode = e.status;
}
if (statusCode == 200) {
console.log("async_request ok");
return [true, ajaxRes];
} else if (statusCode == 401) {
console.log("async_request auth ng");
browserHistory.replace(`/v1/login`);
return [false, errData];
} else {
console.log("async_request ng");
return [false, errData];
}
}
看浏览器的Network是正确的,三个布尔值都是true,但是像上面的代码那样 ajaxRes = await defer.promise();ajaxRes 拿到的数据就是有错误的。
没找到原因,但是只能解决这个问题,使用这种方式,转来转去数据就是正确的 JSON.parse(JSON.stringify(ajaxRes));使用ajaxRes[0].endTalkFlg也是可以拿到正确的数据。
所以说,很神奇!
后续来了…
这是使用那个方法的地方
async fetchData() {
let resFlg, resData;
[resFlg, resData] = await IcApiUtils.fetchAutoResMaster();
if (resFlg) {
let entData, doorData;
entData = [];
doorData = [];
for (let i = 0; i < resData.length; i++) {
// 文字列はbooleanで処理する(返却時は文字列にする)
// resData[i].endTalkFlg = resData[i].endTalkFlg == "true";
// resData[i].unLockFlg = resData[i].unLockFlg == "true";
// resData[i].presetFlg = resData[i].presetFlg == "true";
if (resData[i].type == "entrance") {
entData.push(resData[i]);
} else {
doorData.push(resData[i]);
}
}
// エントランス設定
this.setState({ tableData_1: entData });
// ドアホン設定
this.setState({ tableData_2: doorData });
}
IcCommonUtils.removeLoading();
}
被注释注掉的地方是逻辑错误的,导致resData[i].endTalkFlg始终都是false。但是我不是专业搞前端的,不知道为啥这个jsx中的作用域是怎样的。反正把那三句话注释掉,所有的resData数据就是正常的了。
更多推荐
所有评论(0)