Я не знаком с использованием этого конкретного API, однако эта функция мне кажется асинхронной по своей природе. Вы передаете значение в качестве первого аргумента, и при успешном выполнении какой-либо работы, успех доступен через функцию обратного вызова.
shortUrl.short(url, function(err, url) {
return url;
})
На основе этой логики c я бы создал замыкание чтобы теперь можно было определить некоторые функции, которые я мог бы выполнить позже.
const valueToBeStored = (url)=>{
let shortenedURL;
return ()=>{
shortUrl.short(url, function(err, result) {
shortenedURL= result
}
return shortenedURL;
}
}
const returnedFunc = valueToBeStored(url)
const storedValue = returnedFunc()
В моем примере я определяю функцию с именем valueToBeStored, которая принимает один параметр, URL-адрес. В рамках этой функции я объявляю переменную для хранения значения того, что вы хотите сохранить. Эта функция возвращает функцию, которая использует ваш API для выполнения некоторой асинхронной работы. Из-за концепции замыкания возвращение функции из функции создает закрытую переменную среду, в которой у нас есть доступ к закрытым переменным, которые мы можем использовать для кэширования информации. Возвращаемая функция сохранит результат выполнения асинхронной работы в переменной, объявленной в области видимости внешней функции, внутренняя функция вернет эту переменную, теперь содержащую значение, которое вы хотите сохранить.
Когда поток выполнения увидит объявление этой функции, он сохранит все определение в памяти.
Затем он попадет в эту строку:
const returnedFunc = valueToBeStored(url)
... где он вызовет функцию, хранящуюся в памяти, сохранит переменную shortenedURL
в своей локальной памяти в контексте внешней функции, затем вернет все определение функции и сохранит ее в переменной storedValue
.
Как только эти строки кода были выполнены, поток теперь вычисляет ...
const storedValue = returnedFunc()
... если вы помните, returnedFunc
- это определение функции, которое мы можем вызвать и сохранить его возвращаемое значение в некоторой переменной. При вызове он выполняет ваш API-интерфейс shortURL, сохраняет возвращенное значение из вызова в переменной shortenedURL
(к которой он имеет доступ из-за закрытия), и как только метод завершится, он вернет значение shortenedURL
храниться в переменной storedValue
.