Im quite new to typescript and i have a fuction that will fetch user's steam inventory and store it in "inventory" parameter, but when i want to return it it will return undefined:
function getUserInv(steamid) {
manager.getUserInventoryContents(steamid, 440, 2, true, function(err, inventory) {
if(err) {
console.log(err);
} else {
return inventory
};
});
};
console.log(getUserInv('<my steamid>')) //returns undefined
How can i make it so that when i call it like above, it returns the inventory? Any help is appriciated :-)
CodePudding user response:
you can wrap it into a Promise
like this
function getUserInv(steamid) {
return new Promise((resolve, reject) => {
manager.getUserInventoryContents(steamid, 440, 2, true, function(err, inventory) {
if(err) {
reject(err);
} else {
resolve(inventory)
};
});
}
};
getUserInv('<my steamid>').then(console.log)
CodePudding user response:
Because this function returns a value asynchronously, you need to return a data type that can handle asynchronous values.
In JS, that is called a promise. You can access their value by registering a callback using .then()
, or in TypeScript and other modern JS environments, you can use the nice async/await
syntax.
Here is how you would create and return a promise from your function.
function getUserInv(steamid: string): Promise<Inventory> {
return new Promise((resolve, reject) {
manager.getUserInventoryContents(steamid, 440, 2, true, function(err, inventory) {
if(err) {
reject(err);
} else {
resolve(inventory);
};
});
});
}
// Using .then():
getUserInv('<my steamid>').then(inv => console.log(inv));
// Using async/await:
console.log(await getUserInv('<my steamid>'));