【发布时间】:2018-07-03 18:30:23
【问题描述】:
我试图从 Promise 返回值并将其分配给函数内的局部变量,但 Promise 最终被触发。
函数(将在 Vue.js mounted() 中触发):
getPriceForYesterday(){
let yesterdayUSD = [];
for (let i = 0; i < this.cryptos.length; i++) {
let cryptoName = this.cryptos[i].title;
let timestamp = new Date(this.cryptos[i].purchaseDate);
timestamp.setDate(timestamp.getDate() - 1);
timestamp = timestamp.toISOString();
let priceYesterday = getPriceForTimestamp(cryptoName, timestamp);
Promise.all([priceYesterday]).then((values) => {
console.log("values", values)
yesterdayUSD.push(values[0]);
}).catch(e => console.error(e));
}
console.log("yesterdayUSD", yesterdayUSD);
console.log("yesterdayUSD[0]", yesterdayUSD[0]);
}
输出:
yesterdayUSD []
yesterdayUSD[0] undefined
values [13308.06]
values [1278.69]
我想用yesterdayUSD与本地存储值进行比较,然后将比较的“结果”返回给vue数据。
【问题讨论】:
-
你必须等待所有的 Promise 都解决后才能进行比较。这是因为 Promise 是异步的。你也可以重写或编码并使用 ES6 的异步特性。
-
你能告诉我如何等待所有已解决的承诺吗?我想我也必须在 ES6 中重写
getPriceForTimestamp(cryptoName, timestamp),因为我也在使用 Promises。 -
你不必使用 ES6 来处理这个问题。我已经发布了答案。
-
你能在这个问题上更准确一点吗?这是 UI 显示未定义值的问题吗?在这种情况下,您始终可以使用
v-show/v-if
标签: javascript arrays asynchronous vue.js promise