uni-app 文档的示例代码错误
uni-app 文档的示例代码错误
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:10
HBuilderX类型:正式
HBuilderX版本号:3.2.7
手机系统:Android
手机系统版本号:Android 10
手机厂商:华为
页面类型:vue
打包方式:云端
预期结果:
其中末尾的
function(error, result) {
if (error) {
throw error;
}
res.json(result);
}
error和result参数反了
bug描述:
文档地址为:https://ask.dcloud.net.cn/article/35667
错误代码如下
```javascript
var express = require('express');
var router = express.Router();
var db = require('./db');
// TODO 查询配置文件或者数据库信息来确认是否有更新
function checkUpdate(params, callback) {
db.query('一段SQL', function(error, result) {
// 这里简单判定下,不相等就是有更新。
var currentVersions = params.appVersion.split('.');
var resultVersions = result.appVersion.split('.');
if (currentVersions[0] < resultVersions[0]) {
// 说明有大版本更新
callback({
update: true,
wgtUrl: '',
pkgUrl: result.pkgUrl
})
} else {
// 其它情况均认为是小版本更新
callback({
update: true,
wgtUrl: result.wgtUrl,
pkgUrl: ''
})
}
});
}
router.get('/update/', function(req, res) {
var appName = req.query.name;
var appVersion = req.query.version;
checkUpdate({
appName: appName,
appVersion: appVersion
}, function(error, result) {
if (error) {
throw error;
}
res.json(result);
});
});
更多关于uni-app 文档的示例代码错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app 文档的示例代码错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html
您指出的文档示例代码确实存在参数顺序问题。在Node.js的数据库查询回调中,标准约定是function(error, result),其中error在前,result在后。示例中checkUpdate函数内部调用db.query时遵循了这一约定,但在checkUpdate自身的回调定义中却使用了function(error, result),而其内部调用callback时传递的却是一个结果对象,没有错误参数,这会导致回调执行时error参数实际接收到的是结果数据,而result为undefined。
具体到checkUpdate函数,它并未处理数据库查询可能出现的错误(即db.query回调中的error未传递给checkUpdate的回调),且直接调用callback时只传递了一个结果对象。因此,其回调函数应定义为function(result),而不是function(error, result)。文档中的写法在运行时,当无错误时,error参数将接收到结果对象,result为undefined,而if (error)会误将结果对象当作错误处理,导致逻辑错误。
修正后的checkUpdate应正确处理错误传递,例如:
function checkUpdate(params, callback) {
db.query('一段SQL', function(error, result) {
if (error) {
callback(error); // 传递错误
return;
}
// 正常处理结果
var currentVersions = params.appVersion.split('.');
var resultVersions = result.appVersion.split('.');
if (currentVersions[0] < resultVersions[0]) {
callback(null, { // 第一个参数为null表示无错误
update: true,
wgtUrl: '',
pkgUrl: result.pkgUrl
});
} else {
callback(null, {
update: true,
wgtUrl: result.wgtUrl,
pkgUrl: ''
});
}
});
}

