使用节点js在父函数中使用子数据
Use child data inside parent function using node js
我想 return 一个值并将其存储在一个变量中。我不知道这是否可行,但我试过了
let demo = await Promise.all(
Shop.findAll({
where: {
product_id: child.id,
},
attributes: ["id", "address"],
})
.then((adds) => {
adds.map(async function (add) {
let path = add.address;
return path;
});
})
.catch(function (err) {
reject(err);
})
);
console.log(demo);
我得到的只是demo = []
- 我对演示的预期输出是
New York
London
Mumbai
Sydney
- 实际上我得到了
demo= []
我想做的是我需要父函数中的商店地址,因为 Shop 是我的子函数,所以我的实际代码如下所示
Owner.findAll({
raw: true,
where: {
id: owner.id,
},
attributes: ["id", "name", "address"],
})
.then(async (children) => {
await Promise.all(
children.map(async function (child) {
let ownerName = child.name;
let demo = await Promise.all(
Shop.findAll({
where: {
product_id: child.id,
},
attributes: ["id", "address"],
})
.then((adds) => {
adds.map(async function (add) {
let path = add.address;
return path;
});
})
.catch(function (err) {
reject(err);
})
);
// I want to use demo in getStatus function
await getStatus(ownerName,demo);
})
);
})
.catch(function (err) {
reject(err);
});
我想在我的所有者数据中使用商店数据
脚本中存在一组错误:
- 缺少
return
:Promise.all
没有收到任何承诺数组
- 有不必要的
async/await
包装会增加代码的开销
- 有一个
async
函数实际上是同步的 let path = add.address;
- 将
async/await
与 then/catch
链接混合使用会使代码难以阅读和理解
catch
和 reject
多次
可以这样写:
let demo = await Shop.findAll({
where: { product_id: child.id, },
attributes: ["id", "address"],
})
.then(adds => {
return adds.map(toPath);
})
function toPath(item) {
let path = item.address;
return path;
}
或者第二个:
return Owner.findAll({
raw: true,
where: {
id: owner.id
},
attributes: ['id', 'name', 'address']
})
.then((children) => {
return Promise.all(children.map(processChild))
})
async function processChild (child) {
const ownerName = child.name
const adds = await Shop.findAll({
where: { product_id: child.id },
attributes: ['id', 'address']
})
const demo = adds.map(add => add.address)
const status = await getStatus(ownerName, demo)
// manage the `status` or just `return getStatus(ownerName, demo)`
return status
}
关于以下内容的通知:
.catch(function (err) {
reject(err);
})
在 Shop.findAll
代码中,可能会导致多次拒绝调用,从而导致内存泄漏。
像我发布的片段一样,链接所有的承诺,让你只设置一个 catch
.
因为有一个 reject
函数,我假设您将代码包装在一个 promise 中:
return new Promise((resolve, reject) => {
Owner.findAll({...})
.then(...)
.catch(function (err) {
reject(err);
})
})
这是不必要的,因为您只需要 return Owner.findAll
的承诺 return,此代码是相同的:
return Owner.findAll({...})
.then(...)
我想 return 一个值并将其存储在一个变量中。我不知道这是否可行,但我试过了
let demo = await Promise.all(
Shop.findAll({
where: {
product_id: child.id,
},
attributes: ["id", "address"],
})
.then((adds) => {
adds.map(async function (add) {
let path = add.address;
return path;
});
})
.catch(function (err) {
reject(err);
})
);
console.log(demo);
我得到的只是demo = []
- 我对演示的预期输出是
New York
London
Mumbai
Sydney
- 实际上我得到了
demo= []
我想做的是我需要父函数中的商店地址,因为 Shop 是我的子函数,所以我的实际代码如下所示
Owner.findAll({
raw: true,
where: {
id: owner.id,
},
attributes: ["id", "name", "address"],
})
.then(async (children) => {
await Promise.all(
children.map(async function (child) {
let ownerName = child.name;
let demo = await Promise.all(
Shop.findAll({
where: {
product_id: child.id,
},
attributes: ["id", "address"],
})
.then((adds) => {
adds.map(async function (add) {
let path = add.address;
return path;
});
})
.catch(function (err) {
reject(err);
})
);
// I want to use demo in getStatus function
await getStatus(ownerName,demo);
})
);
})
.catch(function (err) {
reject(err);
});
我想在我的所有者数据中使用商店数据
脚本中存在一组错误:
- 缺少
return
:Promise.all
没有收到任何承诺数组 - 有不必要的
async/await
包装会增加代码的开销 - 有一个
async
函数实际上是同步的let path = add.address;
- 将
async/await
与then/catch
链接混合使用会使代码难以阅读和理解 catch
和reject
多次
可以这样写:
let demo = await Shop.findAll({
where: { product_id: child.id, },
attributes: ["id", "address"],
})
.then(adds => {
return adds.map(toPath);
})
function toPath(item) {
let path = item.address;
return path;
}
或者第二个:
return Owner.findAll({
raw: true,
where: {
id: owner.id
},
attributes: ['id', 'name', 'address']
})
.then((children) => {
return Promise.all(children.map(processChild))
})
async function processChild (child) {
const ownerName = child.name
const adds = await Shop.findAll({
where: { product_id: child.id },
attributes: ['id', 'address']
})
const demo = adds.map(add => add.address)
const status = await getStatus(ownerName, demo)
// manage the `status` or just `return getStatus(ownerName, demo)`
return status
}
关于以下内容的通知:
.catch(function (err) {
reject(err);
})
在 Shop.findAll
代码中,可能会导致多次拒绝调用,从而导致内存泄漏。
像我发布的片段一样,链接所有的承诺,让你只设置一个 catch
.
因为有一个 reject
函数,我假设您将代码包装在一个 promise 中:
return new Promise((resolve, reject) => {
Owner.findAll({...})
.then(...)
.catch(function (err) {
reject(err);
})
})
这是不必要的,因为您只需要 return Owner.findAll
的承诺 return,此代码是相同的:
return Owner.findAll({...})
.then(...)