Как подождать, пока Android Virtual Devices завершит загрузку [duplicate]

Это одно из мест, с помощью которого привязка данных, используемая во многих новых фреймворках JavaScript, будет очень полезна для вас ...

Итак, если вы используете Angular, React или любые другие фреймворки, которые делают два способа связывания данных, эта проблема просто исправлена ​​для вас, поэтому простым языком ваш результат undefined на первом этапе, поэтому вы получили result = undefined до получения данных, а затем, как только вы получите результат , он будет обновляться и присваиваться новому значению, которое отвечает на ваш вызов Ajax ...

Но как вы можете сделать это в чистом javascript или jQuery, например, как вы задали этот вопрос?

Вы можете использовать обратный вызов, обещание и недавно наблюдаемое, чтобы обрабатывать его для вас, например, в обещаниях мы имеем некоторые функции, такие как success () или then (), которые будут выполняться, когда ваши данные будут готовы для вас, с функцией обратного вызова или подписки на наблюдаемые.

Например, в вашем случае, в котором вы используете jQuery, вы можете сделать что-то вроде этого:

$(document).ready(function(){
    function foo() {
        $.ajax({url: "api/data", success: function(data){
            fooDone(data); //after we have data, we pass it to fooDone
        }});
    };

    function fooDone(data) {
        console.log(data); //fooDone has the data and console.log it
    };

    foo(); //call happens here
});

Для получения дополнительной информации n изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.

4
задан Vladimir S. 26 October 2012 в 17:44
поделиться

3 ответа

Для тех из вас, кто работает в среде Windows, этот пакетный скрипт работает для меня.

Он ждет, пока работает демон ADB, затем начнет опрос свойства sys.boot_completed и ждет значения 1.

Это не так элегантно, как одна строка, но у меня есть сценарий, указанный в моей переменной среды PATH, поэтому его можно вызвать напрямую.

adb wait-for-device

:CheckAgain
set value=
for /f "delims=" %%a in ('adb shell getprop sys.boot_completed') do @set value=%%a

IF NOT "%value%" == "1" (
    timeout /t 2 /nobreak >NUL
    goto CheckAgain
)
4
ответ дан AggieBlue 6 September 2018 в 01:22
поделиться

Вы можете продолжать опрос для системных свойств sys.boot_completed или dev.bootcomplete.

Что касается кода, я не знаю, какую среду и / или язык сценариев вы используете. Это довольно просто. Сначала вам нужно найти, какое свойство устанавливается в «1» при загрузке с помощью программного обеспечения вашего телефона. Предположим, что это dev.bootcomplete. Затем следующая команда вернет управление обратно к вашему скрипту после загрузки телефона

adb wait-for-device shell 'while [[ -z $(getprop dev.bootcomplete) ]] ; do sleep 1; done'
11
ответ дан Alex P. 6 September 2018 в 01:22
поделиться

Если на вашем устройстве нет загруженного узла (см. сценарий оболочки в android дает [: not found ), вы можете попробовать выполнить итерацию на своем компьютере. Что-то вроде этого будет работать:

while [ `adb shell getprop dev.bootcomplete` -nq "1" ] ; do sleep 1; done

Если ваше устройство установлено в busybox, вы можете продолжить, как прокомментировал Alex P.:

adb shell 'while [ ""`getprop dev.bootcomplete` != "1" ] ; do sleep 1; done'

Конечно, синтаксис зависит от вашей машины (POSIX и т. Д.).

0
ответ дан Community 6 September 2018 в 01:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: