到达端点后,我想在定义的过期时间后执行服务。 这意味着我需要使用 Strapi 实例。
有没有一种方法可以像 CRON 作业一样创建,但运行一次,并且从到达代码时开始动态设置计时,并可以访问 Strapi 实例?
我正在使用 Strapi v4
我尝试在我的服务中使用
setTimeout()
,但它说 strapi is undefined
。
// src/api/my-api/services/my-api.js
module.exports = createCoreService(
'api::my-api.my-api',
({ strapi }) => ({
...
// This service is called by a controller
async myService() {
setTimeout(
async ({ strapi }) => {
await strapi
.service('api::my-api.my-api')
.otherService();
},
10000, // 10 secs for this exemple
{ strapi }
);
}
...
}));
如果您想在 Strapi 启动后执行任务,您需要在应用程序的
bootstrap
中执行此操作。
// src/index.js
module.exports = {
....
bootstrap({ strapi }) {
setTimeout(async () => {
await strapi
.service('api::my-api.my-api')
.otherService();
},
10000, // 10 secs for this exemple
);
},
嗨,您需要详细说明一下,刚刚在新的 Strapi 应用程序上测试了代码,一切正常,唯一更改的文件是:
src/index.js
"use strict";
module.exports = {
/**
* An asynchronous register function that runs before
* your application is initialized.
*
* This gives you an opportunity to extend code.
*/
register(/*{ strapi }*/) {},
/**
* An asynchronous bootstrap function that runs before
* your application gets started.
*
* This gives you an opportunity to set up your data model,
* run jobs, or perform some special logic.
*/
bootstrap({ strapi }) {
setTimeout(async () => {
const test = await strapi.db
.query("plugin::users-permissions.role")
.findMany();
console.log({ test });
}, 10000);
},
};
证明: