我是Node JS的新手。我实践诺言并成功使用了诺言。我了解的是,使用诺言可以保留输出并发送确定和拒绝。我用于数据库操作。
然后有人建议我使用异步/唤醒。这是我的代码,第一次成功运行。
shop.js文件
tableView.estimatedRowHeight // whatever you want
tableView.rowHeight = UITableView.automaticDimension
还有我称之为的文件
const models = require("../models");
const shopModel = models.Shop;
exports.checkShop = function(shopName) {
return new Promise((reslove, reject) => {
shopModel
.findOne({ where: { shop: shopName } })
.then(rs => {
if (rs) {
reslove(rs);
}
})
.catch(err => {
reject(err.toString());
});
});
};
这就是我尝试用异步/唤醒替换它的方式。但这不起作用。
const shopController = require("./shop");
exports.getInstall = function(req, res) {
const shop = req.body.shop;
if (!cn(shop)) {
shopController
.checkShop(shop)
.then(
shopCheck =>
function() {
if (shopCheck) {
res.send(`Welcome back ${shopCheck.shop}`);
} else {
//my else stuff
}
}
)
.catch(
e =>
function() {
res.state(500).send(e);
}
);
} else {
return res
.status(400)
.send(
"Missing shop parameter. Please add ?shop=your-development-shop.myshopify.com to your request"
);
}
};
另一个文件
exports.checkShop = async function(shopName) {
try{
var rs = await shopModel.findOne({ where: { shop: shopName } });
if(rs){
return rs;
}
else{
return false;
}
}
catch(e){
return Promise.reject(new Error(400));
}
};
答案 0 :(得分:1)
每个带有async
关键字的函数(显式或隐式)之前都会返回承诺。
因此,当您致电shopController.checkShop
时,您要么必须做类似的事情
shopController.checkShop().then(.... )
或将getInstall
设为异步函数,以便您可以在其中使用await
。
exports.getInstall = async function(req, res) {
// other code here..
const result = await shopController.checkShop(shop);
//..
}
修改:
如果您要使getInstall
异步并在await
上使用checkShop
,则必须像在try {} catch
中一样,使用checkShop
来捕获潜在的拒绝。 。