如何在nativescript-vue中使用等待同步? 下面的Vue代码在浏览器中以正确的顺序显示,但是在nativescript中更改对话框的顺序。 有人能猜出这是怎么回事吗?
工作Vue代码
async start() {
await this.speak("first");
this.answer = await this.ask("question");
await this.speak(this.answer);
},
使用本地脚本时,相同的代码现在确实以正确的顺序显示对话框。 Confirm()方法始终首先显示。
var app = new Vue({
el: '#app',
data: {
message: "starting point",
answer: " "
},
methods: {
async start() {
await this.speak("first");
this.answer = await this.ask("question");
await this.speak(this.answer);
},
speak(incoming) {
this.message = incoming + " speech";
alert(incoming);
},
ask(incoming) {
this.answer = prompt(incoming);
this.message = this.answer + " was the answer ";
return this.answer;
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<h2>{{ message }}</h2>
<button @click="start">Start</button>
</div>
答案 0 :(得分:1)
这是因为Web浏览器中的警报对话框会阻止在主线程上运行的所有其他JavaScript代码。此外,alert(...)
在Web上返回void。
在NativeScript alert(...)
中返回一个保证可确保对话框关闭的Promise。在{N}中执行相同的代码时,它不会等待alert(...)
对话框关闭,因为您没有返回承诺。
speak(incoming) {
this.message = incoming + " speech";
return alert(incoming);
},