gpt4 book ai didi

javascript - 在 promise 和 async/awaits 之间混淆

转载 作者:行者123 更新时间:2023-11-29 22:55:15 27 4
gpt4 key购买 nike

我是 Node JS 的新手。我实践了 promise,我成功地使用了它。我的理解是使用 promise ,您可以保留输出并发送解决和拒绝。我用在数据库操作上。

然后有人建议我使用 async/awaits。所以这是我第一次成功运行的代码。

shop.js 文件

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));
}
};

还有另一个文件

exports.getInstall = function(req, res) {
const shop = req.body.shop;

if (!cn(shop)) {
var shopCheck = shopController.checkShop(shop);
try {
if (shopCheck) {
res.send(`Welcome back ${shopCheck.shop}`);
} else {
// else stuff
}
} catch (e) {
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"
);
}
};

最佳答案

每个带有 async 关键字的函数都会(显式或隐式)返回一个 promise。

因此,当您调用 shopController.checkShop 时,您要么必须执行以下操作

shopController.checkShop().then(.... )

或者使 getInstall 成为一个异步函数,以便您可以在其中使用 await

exports.getInstall = async function(req, res) {
// other code here..
const result = await shopController.checkShop(shop);
//..
}

编辑:

如果你想让 getInstall 异步并在 checkShop 上使用 await,你将不得不使用 try { 捕捉潜在的拒绝} catch 就像您在 checkShop 中所做的那样。

关于javascript - 在 promise 和 async/awaits 之间混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56723494/

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