Как правильно использовать новую асинхронную загрузку фрагмента

Я полагаю, что сделанное вами утверждение ложно.

Вы заявили:

Проблема в том, что чтение цикла bash должно выполняться 4 раза (по одному на строку) , Однако, если я напишу код awk с выходом внутри, прочитайте цикл bash после первого цикла.

blockquote>

Я не верю, что скрипт выходит после первого цикла, но застрял в первый цикл. Причина, по которой я делаю это утверждение, заключается в том, что ваш скрипт awk ошибочен. Как вы его написали:

awk -v used=$used -v custom_cpu_thres=$custom_cpu_thres \
    '{ if(used>custom_cpu_thres){ exit 1 }
       else{ exit 0 } }'

Проблема в том, что Awk не получил входной файл. Если входной файл не подтвержден awk, он читает stdin (аналогично обработке ввода на трубке или клавиатуре). Поскольку никакая информация не отправляется на stdin (если вы не нажали пару ключей и случайно не нажали Enter), сценарий не будет двигаться вперед, и Awk ожидает ввода.

Стандартный ввод должен быть используется только в том случае, если не указаны операнды файлов, или если операнд файла имеет значение «-» , или если параметр-аргумент progfile равен «-»; см. раздел INPUT FILES. Если awk-программа не содержит никаких действий и никаких шаблонов, но в остальном является действительной awk-программой, стандартный ввод и любые операнды файлов не должны быть прочитаны, а awk должен выйти с нулевым статусом возврата.

source: Awk POSIX Standard

blockquote>

Следующая строка bash демонстрирует вышеуказанный оператор:

$ while true; do awk '{print "woot!"; exit }'; done

Только когда вы нажимаете некоторые клавиши, а затем Enter, слово «woot!» печатается на экране!

Как решить вашу проблему: Самый простой способ решить вашу проблему с помощью Awk - использовать блок BEGIN. Этот блок выполняется перед чтением любой строки ввода (или stdin). Если вы сообщите Awk о выходе в начальный блок, он завершит Awk без чтения ввода. Таким образом:

awk -v used=$used -v custom_cpu_thres=$custom_cpu_thres \
    'BEGIN{ if(used>custom_cpu_thres){ exit 1 }
            else{ exit 0 } }'

или короче

awk -v used=$used -v custom_cpu_thres=$custom_cpu_thres \
    'BEGIN{ exit (used>custom_cpu_thres) }

Однако Awk здесь немного перебор. Простой тест bash был бы достаточным:

[[ "$used" -le "$custom_cpu_thres" ]]
result=$?

или

(( used <= custom_cpu_thres ))
result=$?

0
задан Thomas Becker 21 January 2019 в 00:02
поделиться

1 ответ

В общем, вы правы, диалог может загружаться время, но обычно процесс занимает небольшую часть времени, и пользователь не должен видеть никакого времени «загрузки».

Это возможно, только если ваш диалог также загружает данные асинхронно.

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

onOpenDialog : function () {
    var oView = this.getView();

    // create dialog lazily
    if (!this.byId("helloDialog")) {]
        // set the view to busy state
        oView.setBusy(true);
        // load asynchronous XML fragment
        Fragment.load({
            id: oView.getId(),
            name: "sap.ui.demo.walkthrough.view.HelloDialog"
        }).then(function (oDialog) {
            // remove the busy state
            oView.setBusy(false);
            // connect dialog to the root view of this component (models, lifecycle)
            oView.addDependent(oDialog);
            oDialog.open();
        });
    } else {
        this.byId("helloDialog").open();
    }
}
0
ответ дан StErMi 21 January 2019 в 00:02
поделиться
Другие вопросы по тегам:

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