Краткий ответ: ваш метод foo()
возвращается немедленно, а вызов $ajax()
выполняется асинхронно после возврата функции . Проблема заключается в том, как и где сохранить результаты, полученные при вызове async, после его возврата.
В этом потоке было задано несколько решений. Возможно, самый простой способ - передать объект методу foo()
и сохранить результаты в члене этого объекта после завершения асинхронного вызова.
function foo(result) {
$.ajax({
url: '...',
success: function(response) {
result.response = response; // Store the async result
}
});
}
var result = { response: null }; // Object to hold the async result
foo(result); // Returns before the async completes
Обратите внимание, что вызов foo()
] все равно не вернут ничего полезного. Однако результат асинхронного вызова теперь будет сохранен в result.response
.
В этом случае вам нужен поток твитов. Мы все знаем, что Sparks предоставляет Streams
. Теперь давайте проверим, действительно ли Spark предоставляет что-то для взаимодействия с твиттером.
Open Spark API-docs -> http://spark.apache.org/docs/1.2.0/api/ scala / index.html # package
Теперь найдите twitter
и bingo ... в пакете org.apache.spark.streaming
есть что-то, называемое TwitterUtils
. Теперь, поскольку он называется TwitterUtils
и находится в пакете org.apache.spark.streaming
, я думаю, что он предоставит помощникам для создания потока из twitter API.
Теперь нажмите на TwitterUtils
и goto -> http://spark.apache.org/docs/1.2.0/api/scala/index.html#org.apache.spark.streaming.dstream.ReceiverInputDStream
И yup .. у него есть метод со следующей сигнатурой
def createStream(
ssc: StreamingContext,
twitterAuth: Option[Authorization],
filters: Seq[String] = Nil,
storageLevel: StorageLevel = StorageLevel.MEMORY_AND_DISK_SER_2
): ReceiverInputDStream[Status]
Он возвращает ReceiverInputDStream[ Status ]
, где Status
- twitter4j.Status
.
Параметры далее поясняются
ssc Объект StreamingContext
аутентификация twitterAuth Twitter4J
или None
использовать авторизацию Twitter4J по умолчанию OAuth
; это использует фильтры system properties
twitter4j.oauth.consumerKey
, twitter4j.oauth.consumerSecret
, twitter4j.oauth.accessToken
и twitter4j.oauth.accessTokenSecret
. Набор строк фильтра позволяет получить только те твиты, которые соответствуют им.
storageLevel Storage уровень для использования для хранения полученных объектов
См. ... Документы API просты. Я полагаю, теперь вы должны быть немного более склонны читать документы API.
И ... Это означает, что вам нужно немного посмотреть (по крайней мере, начальную часть) в документацию twitter4j
.
ПРИМЕЧАНИЕ. Этот ответ специально написан для объяснения «Почему бы не уклониться от документов API?». И был написан после тщательных мыслей. Поэтому, пожалуйста, не редактируйте, если ваше редактирование не вносит существенный вклад.
blockquote>