gpt4 book ai didi

javascript - 通过 NodeJS 脚本迭代数组中的项

转载 作者:行者123 更新时间:2023-12-03 01:07:07 24 4
gpt4 key购买 nike

我正在尝试寻找使用 contentful-management API 在 Contentful 中创建多个 Assets 的解决方案。

实现 Assets 单次创建的nodeJS脚本为

const client = contentful.createClient({
accessToken: '<content_management_api_key>'
})

client.getSpace('<space_id>')
.then((space) => space.getEnvironment('<environment-id>'))
.then((environment) => environment.createAssetWithId('<asset_id>', {
title: {
'en-US': 'Example 1'
},
file: {
'en-US': {
contentType: 'image/jpeg',
fileName: 'example1.jpeg',
upload: 'https://example.com/example1.jpg'
}
}
}))
.then((asset) => asset.processForAllLocales())
.then((asset) => asset.publish())
.then((asset) => console.log(asset))
.catch(console.error)

这非常简单且易于实现。但是,当想要创建多个 Assets 时,这不起作用。

经过几个小时寻找记录的方法来实现这一目标,但无济于事,我来到了

const contentful = require('contentful-management');
const assets = require('./assetObject.js');

async () => {
const client = contentful.createClient({
accessToken: '<content_management_api_key>'
});

const space = await client.getSpace('<space_id>');
const environment = await space.getEnvironment('<environment-id>');
const createdAssets = await Promise.all(
assets.map(
asset =>
new Promise(async () => {
let cmsAsset;

try {
cmsAsset = await environment.createAssetWithId(asset.postId, {
fields: {
title: {
'en-US': asset.title
},
description: {
'en-US': asset.description
},
file: {
'en-US': {
contentType: 'image/jpeg',
fileName: asset.filename,
upload: asset.link
}
}
}
});
} catch (e) {
throw Error(e);
}
try {
await cmsAsset.processForAllLocales();
} catch (e) {
throw Error(e);
}
try {
await cmsAsset.publish();
} catch (e) {
throw Error(e);
}
})
)
);
return createdAssets;
};

assetObject.js

[
{
link: 'https://example.com/example1.jpg',
title: 'Example 1',
description: 'Description of example 1',
postId: '1234567890',
filename: 'example1.jpeg'
}, ... // Many more
]

运行时,不会产生任何错误,也不会执行任何操作。我做错了什么?这是我应该使用的方法吗?

最佳答案

需要“解决”和“拒绝”新的 promise ,因此对我来说代码应该如下所示

 const createdAssets = await Promise.all(
assets.map(
asset =>
new Promise(async (resolve, reject) => {
try {
const cmsAsset = await environment.createAssetWithId(asset.postId, {
fields: {
title: {
'en-US': asset.title
},
description: {
'en-US': asset.description
},
file: {
'en-US': {
contentType: 'image/jpeg',
fileName: asset.filename,
upload: asset.link
}
}
}
});
await cmsAsset.processForAllLocales();
await cmsAsset.publish();
resolve(cmsAsset);
} catch (e) {
reject(e);
}
})
)
);
return createdAssets;

希望对你有帮助

关于javascript - 通过 NodeJS 脚本迭代数组中的项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52343437/

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