How to use Async/ Await with async function having callback?
Not using Async/ Await
var successCallback = function(responseNewUri) {
// Do something with responseNewUri
// ...
}
var errorCallback = function(error) {
alert('Error: ', error)
}
// Convert the "content://" into "file://"
const uri = "content://xxxxx"
window.FilePath.resolveNativePath(fileUri, successCallback, errorCallback);
Using Async/ Await
// Create promise method
const promiseResolveFilePath = (uri) => {
const promise = new Promise((resolve, reject) => {
const successCallback = (responseNewUri) => {
resolve(response)
}
const errorCallback = (error) => {
reject('NG')
}
window.FilePath.resolveNativePath(fileUri, successCallback, errorCallback)
})
return promise
}
// Usage
try {
const uriResolved = await promiseResolveFilePath(uri)
if (uriResolved !== 'NG') {
// Success to "resolveNativePath", do something with new uriResolved
...
} else {
// Fail to "resolveNativePath"
...
}
} catch(error) {
// Reject value comes here
}
How to use Promise in “reduce”?
const result = await list.reduce(async (newArray, element) => {
// Some await process here
...
// Then
newArray.push({
"id": 1,
"name": "ABC"
})
return newArray
}, [])
console.log(result) // Promise <pending>
You have to use Promise returning version
const result = list.reduce(async (newArray, element) => {
const newSetArray = await newArray
// Some await process here
...
// Then
newSetArray.push({
"id": 1,
"name": "ABC"
})
return newSetArray
}, [])
console.log(result)
How to get return value from an async function?
Async function always returns Promise
async function hello() {
return 'Hello Alligator!';
}
hello()
.then(x => console.log(x)); // Hello Alligator!
.catch(x => console.log(x)) // unhandled errors
Can I use async/await in loop?
It works with most loops (while, for-of, …) but won’t work with loops that require a callback (forEach, map, filter, …)
Leave a Reply