# DataStoreService

{% hint style="danger" %}
**WARNING:** Yielding in an [Event](https://docs.easy.gg/scripting/bedwars-scripting/events) will delay the outcome of the event. All DataStoreService functions WILL yield the current thread.

It is **highly recommended** to use `task.spawn()`around all DataStoreService functions. An example is provided below.&#x20;
{% endhint %}

Example usage:

```lua
-- Double the score of a player whenever they kill an entity
local function doubleScore(current)
    return current * 2
end

Events.EntityDeath(function (event)
    local killerPlayer = event.killer:getPlayer()
    if (killerPlayer == nil) then
        return
    end
    task.spawn(function()
        local currentValue = DataStoreService.getAsync(killerPlayer.userId)
        if (currentValue == nil) then
            currentValue = 1
        end
        DataStoreService.setAsync(killerPlayer.userId, doubleScore(currentValue))
    end)
end)
```

### Functions

#### getAsync(key: string | number): any

Returns the latest stored value for the given key.

#### setAsync(key: string | number, value: any): bool

Sets the latest value for the given key. Returns true if the network call was successful.

#### incrementAsync(key: string | number, amount: number): bool

Increases the current integer value for the given key by the given amount (must also be an integer value). Returns true if the network call was successful.

#### removeAsync(key: string | number): bool

Marks the given key as deleted. Returns true if the network call was successful.
