...
If you only had 20 emails and each email takes a second to query, then a for loop would work fine. But what if you have 100,000 emails? You really need to be able to wake up a component, get a small batch of say 10, iterate and store the next ID and then get the next 10 and so on.
It’s nice to control where you start from and keep incrementing the value as we go forward. The COUNT library solves this problem.
Expand |
---|
title | Create a custom component using +COMPONENT |
---|
|
To test out the COUNT library, make a custom component. See Create a Component. |
Expand |
---|
title | Import the COUNT library into your project. |
---|
|
See Import a Library if you need a refresher on how to do it. |
Expand |
---|
title | Create a custom number field called 'NextId' and set it to the value 156 in your card |
---|
|
NextId First, in config.json add your Custom Fields. Then go to your component card and set the value to 156. See Custom Fields
Note: You’ll need to change your component to use the DEVELOPMENT commit to see the newly added custom field. See Choosing the code to run for your component. |
Expand |
---|
title | local NextId = COUNTget("NextId") is how we fetch the data |
---|
|
This is how we We can use COUNTget to get the data from a the custom field called NextId. We increment NextId by 1 each time the component runs. Code Block |
---|
| local NextId = COUNTget("NextId")
NextId = NextId+1 |
|
Expand |
---|
title | COUNTset("NextId", NextId) is how we set it. |
---|
| So this |
title | It COUNTset saves the new value of the custom field in the custom field value file. Code Block |
---|
| COUNTset("NextId", NextId) |
|
---|
Expand |
---|
This means we can see the NextId in the card view of the component - and we can set it too! |
Image Removed |
Expand |
---|
title | To test this, we can set the component to run every 2 seconds using component.setTimer{delay=} |
---|
|
You can use component.setTimer{} is used here to run main every 2 seconds. This is a complete little program to increment a custom number field: Code Block |
---|
require "COUNT.COUNT"
function main(Data)
--Poll the component every 2 seconds
component.setTimer{delay=2000}
local NextId = COUNTget("NextId")
NextId = NextId+1
COUNTset('NextId', NextId)
end |
|
Expand |
---|
title | Run the component from the component card view and see the NextId value change. |
---|
|
Image Added |
Expand |
---|
title | The COUNT library solves this problem by giving a convenient interface to GET/SET get and set a custom field value |
---|
|
Remember, the Custom Fields the values for these are stored on disc in JSON. This means we can load and save them programmatically. This is how this library works. |
This is a very useful pattern for lots of Feeder interfaces. It’s used as part of the IMAP Email Feed component.