Отображение в шаблоне приложения Vue данных, извлеченных из API, с использованием ASYNC / AWAIT (игровая площадка Nativescript) - PullRequest
0 голосов
/ 22 февраля 2019

это кажется, что это должно быть тривиально, но я преследовал это в течение 3 недель.

Я хочу получить данные из моего API и отобразить их в шаблоне Vue, который я позаимствовал из NativeScript.org PlaygroundПример погоды.

И я хочу использовать ASYNC / AWAit, так как это выглядит более элегантно.

    <template>
    <Page class="Page" actionBarHidden="true" backgroundSpanUnderStatusBar="true">
<StackLayout>
    <StackLayout row="0">
      <Image class="event-image" :src="eventImage" />
      <Label class="bold" :text="exported_event0" backgroundColor="gray"></Label>
      <Label class="bold" :text="created_event1" backgroundColor="gray"></Label>
      <Label class="bold" :text="created_event2" backgroundColor="gray"></Label>
    </StackLayout>
</StackLayout>
    </Page>
</template>

<script>
    const httpModule = require("http");
    var exported_event0;
    var exported_event1;
    var exported_event2;
    var created_event1;
    var created_event2;
    var fetched_event;


    export default {
        data() {
            return {
                exported_event0: "A string of a returned event",
                exported_event1: created_event1,
                exported_event2: created_event2,
            };
        },
        created() {
            this.eventImage = "~/images/augustus.jpg";
            this.created_event1 = "A stringy created event";
            this.created_event2 = getEvent().then(result => console.log(result));
            console.log("created_event2 is:" + this.created_event2);
      },
        };
      async function getEvent() {
            console.log("-----httpmodule ----------------------------");
            let fetched_event = await httpModule.getJSON("https://agile-brushlands-36817.herokuapp.com/events/4.json").then(function(result) {
              console.log("---------Event api fetched." + JSON.stringify(result));
              }, function(error) {
                 console.error("the GETJSON eror" + JSON.stringify(error));
            });
            console.log("---------Event api fetched." + JSON.stringify(fetched_event));
          return fetched_event;
        };
</script>

1) Можно / нужно экспортировать |данные |упрощенный созданный подход (из шаблона)?

2) Как заставить вызов getEvent () ожидать выборки данных?

Вот (сокращенно) журнал:

'-----httpmodule ----------------------------'
'---------Event api fetched.{"id":4,"title":"The armies of Richard I and Saladin fight it out in the Holy Land. Richard gets Arsuf; Saladin keeps Jerusalem.","year":1191,"position":null,"wikip":"http://en.wikipedia.org/wiki/Saladin#Third_Crusade","image":"","created_at":"2019-01-29T16:48:02.248Z","updated_at":"2019-01-29T16:48:02.248Z","url":"https://agile-brushlands-36817.herokuapp.com/events/4.json"}'
 '---------Event api fetched.undefined'
  CONSOLE LOG undefined

1 Ответ

0 голосов
/ 23 февраля 2019

При использовании async/await вам не нужно использовать обещания.Вы можете обновить функцию getData для правильного использования await и вернуть результат

async function getEvent() {
    try{
        console.log("-----httpmodule ----------------------------");
        let result = await httpModule.getJSON("https://agile-brushlands-36817.herokuapp.com/events/4.json");
        console.log("---------Event api fetched." + JSON.stringify(result));
        return result;
    }
    catch(error){
         console.error("the GETJSON eror" + JSON.stringify(error));
    }
}

Затем вы захотите убедиться, что ваш created хук также является асинхронным, поэтому вы можете использовать в нем ключевое слово await при вызове getData

async created() {
    this.eventImage = "~/images/augustus.jpg";
    this.created_event1 = "A stringy created event";
    this.created_event2 = await getEvent();
    console.log("created_event2 is:" + this.created_event2);
},
...