Sails JS - 嵌套的 .query 方法没有 运行 序列
Sails JS - Nested .query method doesn't run sequence
我是 Sails JS 的初学者。我尝试制作多个 .query("SELECT ... ")。当看起来不是 运行 序列时,我遇到了问题。我会解释我的问题,看看我的代码片段:
var isSuccess = true;
for(var loc = 0 ; loc < decode.length ; loc++){
Location.query('SELECT * FROM abc', function (err, res){
if (err) {
isSuccess = false;
return res.json(200, {
data: {
},
status: {
id: 0,
message: err.message
}
});
} else {
var validate = res.rows;
sails.log(validate);
secondQuery.query('SELECT * FROM def', function (err, seconResult) {
if (err) {
isSuccess = false;
sails.log("Update is Success : "+isSuccess);
return res.json(200, {
data: {
},
status: {
id: 0,
message: err.message
}
});
} else {
}
});
}
});
if(isSuccess){
return res.json(200, {
data: {
},
status: {
id: 1,
message: "Successful",
isSuccess: isSuccess
}
});
}
}
当我通过 POST 方法请求 API 时,结果是:
在控制台节点 JS 服务器上:
更新成功:false
所以表示请求失败,必须是return status = 0 in postman
但是在 Postman 中,它显示:
data: {
},
status: {
id: 1,
message: "Successful",
isSuccess: true
}
我的问题:
任何人都可以帮我解释为什么以及如何使它成为一个序列过程,而不是像 "multi thread"? (就我而言,我需要使用 RAW 查询,因为我将面临非常复杂的查询)
谢谢。
for
循环是同步的,而 Location.query()
方法不是。
所以如果你想按顺序做,你必须使用 Bluebird Promise
.
示例(未测试):
const Bluebird = require('bluebird');
const promises = [];
for(let loc = 0 ; loc < decode.length ; loc++) {
promises.push(Location.query('SELECT ...'));
}
Bluebird.each(promises, (result) => res.json(200, {/* your payload data */}))
.catch((err) => res.json(200, {/* your error data */}));
注意:在 Sails 控制器中使用 res
变量时要小心。
我是 Sails JS 的初学者。我尝试制作多个 .query("SELECT ... ")。当看起来不是 运行 序列时,我遇到了问题。我会解释我的问题,看看我的代码片段:
var isSuccess = true;
for(var loc = 0 ; loc < decode.length ; loc++){
Location.query('SELECT * FROM abc', function (err, res){
if (err) {
isSuccess = false;
return res.json(200, {
data: {
},
status: {
id: 0,
message: err.message
}
});
} else {
var validate = res.rows;
sails.log(validate);
secondQuery.query('SELECT * FROM def', function (err, seconResult) {
if (err) {
isSuccess = false;
sails.log("Update is Success : "+isSuccess);
return res.json(200, {
data: {
},
status: {
id: 0,
message: err.message
}
});
} else {
}
});
}
});
if(isSuccess){
return res.json(200, {
data: {
},
status: {
id: 1,
message: "Successful",
isSuccess: isSuccess
}
});
}
}
当我通过 POST 方法请求 API 时,结果是:
在控制台节点 JS 服务器上:
更新成功:false 所以表示请求失败,必须是return status = 0 in postman
但是在 Postman 中,它显示:
data: {
},
status: {
id: 1,
message: "Successful",
isSuccess: true
}
我的问题:
任何人都可以帮我解释为什么以及如何使它成为一个序列过程,而不是像 "multi thread"? (就我而言,我需要使用 RAW 查询,因为我将面临非常复杂的查询)
谢谢。
for
循环是同步的,而 Location.query()
方法不是。
所以如果你想按顺序做,你必须使用 Bluebird Promise
.
示例(未测试):
const Bluebird = require('bluebird');
const promises = [];
for(let loc = 0 ; loc < decode.length ; loc++) {
promises.push(Location.query('SELECT ...'));
}
Bluebird.each(promises, (result) => res.json(200, {/* your payload data */}))
.catch((err) => res.json(200, {/* your error data */}));
注意:在 Sails 控制器中使用 res
变量时要小心。