Возвращаемое значение вне модуля узла - PullRequest
1 голос
/ 30 января 2020

Итак, у меня есть этот вопрос, но я не могу найти решение. Я очищаю свой веб-сайт топором ios, и у меня очень большие URL-адреса, поэтому я хочу использовать сокращатель, я нашел npm (node-url-shorttener) и его очень просто использовать shortUrl.short('https://google.com', function(err, url){ console.log(url); });

но я не хочу console.log Я хочу сохранить это значение

  $(
    ".searchListing"
  ).each((index, element) => {
    const name = $(element)
      .children(".media")
      .children("a")
      .text();

    let url = $(element)
      .children(".media")
      .children("a")
      .attr("href");

    shortUrl.short(url, function(err, url) {
      return url;
    });

    console.log(??????);


    prices[index] = { name, url };
  });

Как я могу сохранить сокращенный URL-адрес в моем массиве вне shortUrl.short модуля?

1 Ответ

0 голосов
/ 30 января 2020

Я не знаком с использованием этого конкретного 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.

...