gpt4 book ai didi

javascript - Sails JS - 嵌套的 .query 方法不运行序列

转载 作者:行者123 更新时间:2023-12-03 02:50:29 26 4
gpt4 key购买 nike

我是 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 时,结果是:

在控制台 Node JS 服务器上:

更新成功:false所以这意味着请求失败,必须在postman中返回status = 0

但在 postman 中,它显示:

  data: {

},
status: {
id: 1,
message: "Successful",
isSuccess: true
}

我的问题:

任何人都可以帮我解释为什么以及如何使其成为一个序列过程,而不是像“多线程”那样? (就我而言,我需要使用原始查询,因为我将面临非常复杂的查询)

谢谢。

最佳答案

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 Controller 中使用 res 变量时,请务必小心。

关于javascript - Sails JS - 嵌套的 .query 方法不运行序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47889451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com