---
title: 定时任务
slug: docs-ch/platform/parse-cron-job
description: 了解如何在Back4App上使用JavaScript创建和调度Parse Cron任务，自动删除未验证邮箱用户。
image: https://www.back4app.com/_public/img/back4app-og.png
createdAt: 2024-02-01T13:25:55.166Z
---

# 如何创建您的 Parse Cron 作业

## 介绍

本节解释了如何通过 Back4App 使用 [Parse Server 核心功能](https://www.back4app.com/product/parse-server) 来调度 cron 作业。

在本教程中，作为示例，您将构建一个 cron 作业，该作业会删除您的 <font color="#2166ae">`Parse Dashboard`</font> 中尚未验证其电子邮件的用户，时间是在他们注册后的一段时间。

:::hint{type="info"}
**您可以随时访问为本教程构建的完整项目，网址为我们的 [GitHub 仓库](https://github.com/back4app/android-background-jobs).**
:::

## 前提条件

:::hint{type="info"}
**要完成本教程，您需要：**

- 在 Back4App 上创建的应用程序。
  - 注意：请遵循 [新 Parse 应用程序教程](https://www.back4app.com/docs/get-started/new-parse-app) 以了解如何在 Back4App 上创建 Parse 应用程序
- 关于云代码的知识。
  - 注意：请遵循 [Android 云代码教程](https://www.back4app.com/docs/android/parse-cloud-code) 或 [iOS 云代码教程](https://www.back4app.com/docs) 获取更多信息。
  - 一台运行 Android 4.0（冰淇淋三明治）或更高版本的设备（或 [虚拟设备](https://developer.android.com/studio/run/managing-avds?hl=pt-br))。
:::

## 1 - 创建您的定时任务代码

1. 创建一个 <font color="#2166ae">`.js`</font> 文件来放置你的定时任务代码。在这个例子中，创建了一个 <font color="#2166ae">`main.js`</font> 文件在一个 <font color="#2166ae">`cloud_code`</font> 目录中。
2. 使用 <font color="#2166ae">`Parse.Cloud.job`</font>. 在这个例子中，以下代码验证你在 <font color="#2166ae">`Parse Dashboard`</font> 中的每个用户，然后查询那些在一段时间后仍未验证其电子邮件的用户并将其删除：

:::CodeblockTabs
Parse Server 3.X main.js

```javascript
1   Parse.Cloud.job("removeInvalidLogin", async (request) => {
2     let date = new Date();
3     let timeNow = date.getTime();
4     let intervalOfTime = 3*60*1000;  // the time set is 3 minutes in milliseconds
5     let timeThen = timeNow - intervalOfTime;
6
7     // Limit date
8     let queryDate = new Date();
9     queryDate.setTime(timeThen);
10
11    // The query object
12    let query = new Parse.Query(Parse.User);
13
14    // Query the users that still unverified after 3 minutes
15    query.equalTo("emailVerified", false);
16    query.lessThanOrEqualTo("createdAt", queryDate);
17
18    const results = await query.find({useMasterKey:true});
19
20    results.forEach(object => {
21        object.destroy({useMasterKey: true}).then(destroyed => {
22            console.log("Successfully destroyed object" + JSON.stringify(destroyed));
23        }).catch(error => {
24            console.log("Error: " + error.code + " - " + error.message);
25        })
26    });
27    
28    return ("Successfully retrieved " + results.length + " invalid logins."); 
29  });
```

Parse Server 2.X main.js

```javascript
1   Parse.Cloud.job("removeInvalidLogin", function (request, response) {
2     var date = new Date();
3     var timeNow = date.getTime();
4     var intervalOfTime = 3*60*1000;  // the time set is 3 minutes in milliseconds
5     var timeThen = timeNow - intervalOfTime;
6
7     // Limit date
8     var queryDate = new Date();
9     queryDate.setTime(timeThen);
10
11    // The query object
12    var query = new Parse.Query(Parse.User);
13
14    // Query the users that still unverified after 3 minutes
15    query.equalTo("emailVerified", false);
16    query.lessThanOrEqualTo("createdAt", queryDate);
17
18    query.find({
19        success: function (results) {
20        console.log("Successfully retrieved " + results.length + " invalid logins.");
21
22        // Destroying the invalid users
23        query.each(function (object, err) {
24          object.destroy({
25            success: function (object) {
26              response.success("Successfully destroyed object " + object.objectId);
27            },
28            error: function (error) {
29              response.error("Error: " + error.code + " - " + error.message);
30            },
31            useMasterKey: true  // VERY IMPORTANT!!
32          })
33        })
34      },
35      error: function (error) {
36        response.error("Error: " + error.code + " - " + error.message);
37      }
38    });
39  });
```
:::

:::hint{type="danger"}
在此操作中需要使用 **主密钥&#x20;**。
:::

:::hint{type="info"}
您可以修改<font color="#2166ae"> `intervalOfTime`</font> 内容，设置您认为未验证用户在未验证其账户的情况下仍可保持账户活跃的时间。只需记住，为了测试您的应用程序，较短的时间间隔更好。因此，建议您将<font color="#2166ae"> `intervalOfTime`</font> 内容设置为三分钟，以测试 cron 作业是否正常工作，然后根据您实际想要的时间更改 JavaScript 代码中的 <font color="#2166ae">`intervalOfTime`</font>。
:::

:::hint{type="danger"}
请不要忘记，只有在您再次上传文件到 Back4app Cloud Code 块时，JavaScript 文件的更改才会在您的应用程序中生效。为此，请删除包含不需要的 <font color="#2166ae">`.js`</font> 文件和不需要的 <font color="#2166ae">`intervalOfTime`</font> 内容，并按照步骤 2 上传包含正确 <font color="#2166ae">`intervalOfTime`</font> 内容的文件。
:::

## 2 - 上传 cron 作业到 Cloud Code

:::hint{type="info"}
要了解有关如何开始使用 Cloud Code 的更多信息，请查看 [Android 的 Cloud Code 教程](https://www.back4app.com/docs/android/parse-cloud-code) 或 [iOS 的 Cloud Code 教程](https://www.back4app.com/docs)。
:::

1. 前往您的应用程序，访问 [Back4App](https://www.back4app.com/) 网站并点击 <font color="#2166ae">`仪表板`</font>.
2. 找到 <font color="#2166ae">`云代码`</font> 并点击 <font color="#2166ae">`函数与网络托管`</font>。它看起来像这样:

::Image[]{src="https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/gAqCZlMJvj1u1_2A82SEg_image.png" size="80" width="810" height="578" position="center" showCaption="false"}

&#x20;    3\. 上传或创建一个新文件（您也可以直接在浏览器中编辑当前的 <font color="#2166ae">`main.js`</font> 文件）。然后，点击 <font color="#2166ae">`部署`</font>，如图所示:

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/cEJDTAvCqpLgcEwst1IYa_image.png)

## 3 - 在 Back4App 上安排 cron 作业

1. 前往您的应用程序，点击 [Back4App 网站](https://www.back4app.com/)，然后点击 <font color="#2166ae">`服务器设置`</font>.
2. 找到“后台作业”块并点击 <font color="#2166ae">`设置`</font>。 “后台作业”块看起来是这样的:

::Image[]{src="https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/X18vSRO1Tvs7KSC0u6elV_image.png" size="50" width="331" height="339" position="center" showCaption="false"}

&#x20;    3\. 将出现一个后台作业页面，并显示两个选项：浏览作业或安排作业。点击安排作业，如下所示:

::Image[]{src="https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/t5AO9omCAxyHaiVXvcKUK_image.png" size="70" width="786" height="551" position="center" showCaption="false"}

:::hint{type="info"}
如果您想要 <font color="#2166ae">`编辑`</font>, <font color="#2166ae">`立即运行`</font>, 或 <font color="#2166ae">`删除`</font> 一个现有的 cron 作业，请点击 <font color="#2166ae">`浏览作业`</font> 按钮。
:::

&#x20;     4\. 将出现一个调度作业页面，您需要在作业的 <font color="#2166ae">`描述`</font> 字段中填写其描述，并在 <font color="#2166ae">`云作业`</font> 字段中填写您在其 JavaScript 代码第一行中设置的 cron 作业名称。在这个例子中，创建的 cron 作业名称是 <font color="#2166ae">`removeInvalidLogin`</font>。

::Image[]{src="https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/MJWhjahzgsKOjL0wJ_Apk_image.png" size="70" width="672" height="755" position="center" showCaption="false"}

&#x20;5\. 您还可以为您的 cron 作业设置其他选项，例如它应该何时开始运行，是否应该重复，以及重复的频率。在填写完这些选项后，请点击 <font color="#2166ae">`保存`</font> 按钮。

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/lbntJNDOU5GfmZr02WH6p_image.png)

## 4 - 测试你的应用

1. 创建一些用户，<font color="#2166ae">`emailVerified`</font> 列设置为<font color="#2166ae">`False`</font> 在你的<font color="#2166ae">`Parse Dashboard`</font>, 如下所示:

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/pGu1s06Aow8ReNU_HLnuF_image.png)

&#x20; 2\. 运行你的应用程序并刷新你的<font color="#2166ae">`Parse Dashboard`</font>。它应该已经删除了未验证的用户。对于上面显示的<font color="#2166ae">`Parse Dashboard`</font>，这是结果:

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/JAjqPNXa7wD-QLmm7VAbe_image.png)

:::hint{type="info"}
**您还可以通过访问 Back4App 日志来查看 cron 作业是否正常工作。要做到这一点，请按照以下步骤操作：**

1. 访问您的应用程序，点击 [Back4App 网站](https://www.back4app.com/)，然后点击 <font color="#2166ae">`服务器设置`</font>.
2. 找到“日志”块并点击 <font color="#2166ae">`设置`</font>。 “日志”块看起来像这样:

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/hWuI1nQOsjx9FfSr0qjbF_image.png)

&#x20;      3\. 向下滚动页面，直到您看到 <font color="#2166ae">`服务器系统日志`</font>。在那里，您应该找到有关正在运行的 cron 作业的信息，如下所示:

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/c8KgYmpE5D3TtfKNQKXb3_image.png)
:::

## 完成！

在此阶段，您可以通过 Back4App 使用 Parse Server Core 功能在您的应用程序中调度 cron 作业！
