我是Stack Overflow的新手,所以我希望我能找到能够解决我的问题的人。
发生了什么事:我目前正在使用ionic创建一个应用,并且我需要执行一些HTTP请求,因为我需要GoogleMaps中的数据。在那之前,我只使用很少的航路点,因此我只能执行一个请求,但是现在,由于我们的局限性,我必须执行其中的许多请求。
问题是,我尝试使用位置之间的距离填充矩阵,但是javascript是异步的,因此它不起作用...这是我的一段代码,仅供您理解,我尝试创建一个for循环以填充矩阵,我想找到一种方法来强制我的脚本等待每个请求的答案,然后再继续。
def sparse_cost_sensitive_loss (logits, labels, cost_matrix):
batch_cost_matrix = tf.nn.embedding_lookup(cost_matrix, labels)
eps = 1e-6
probability = tf.clip_by_value(tf.nn.softmax(logits), eps, 1-eps)
cost_values = tf.log(1-probability)*batch_cost_matrix
loss = tf.reduce_mean(-tf.reduce_sum(cost_values, axis=1))
return loss
httpB代表HTTP Bis,因为我创建了另一个,但这是一个基本的http请求。
如果我不清楚,请告诉我,谢谢您的帮助!
答案 0 :(得分:0)
您需要将所有Promise
对象收集到一个数组中,然后使用Promise.all(theCollection).then(()=>{})
。
您没有在此处发布整个代码...所以我在猜测。以下代码将为您提供一些解决问题的方法。
var promises = [];
for (this.k = 0; this.k < this.adresses_split.length - 1; this.k ++){
this.url = this.url1 + this.adresses_split[this.k] + this.url2 + this.phraseCl + this.url3
console.log(this.url)
promises.push(
this.httpB.get(this.url,{},{}).then(data =>{
for ( this.i = 1; this.i < 4; this.i++ ){
for(this.j = this.i + 1 + 3*this.k ; this.j< this.clients.length + 1; this.j++ ){
this.distances.push(this.i- 1 + 3*this.k);
this.distances.push(this.j - 1);
this.distances.push(data.data.split('elements')[this.i].split('duration')[this.j].split('value" : ')[1].split(' ')[0]);
}
}
}).catch(error => {
console.log(error.status);
this.teste=error.error; // error message as string
console.log(error.headers);
})
);
}
Promise.all(promises).then(() => {
... do you stuff...
}
更新:针对您的评论-如果您希望一次查看和/或处理所有get
请求的结果,请按以下方式更改代码:>
var promises = [];
for (this.k = 0; this.k < this.adresses_split.length - 1; this.k ++){
this.url = this.url1 + this.adresses_split[this.k] + this.url2 + this.phraseCl + this.url3
console.log(this.url)
promises.push(this.httpB.get(this.url,{},{})
.then(data => data)
.catch(error => {
console.log(error.status);
this.teste=error.error; // error message as string
console.log(error.headers);
})
);
}
Promise.all(promises).then(results => {
for(let r = 0; r < results.length; r++){
let data = results[r];
for(this.i=1; this.i < 4; this.i++){
for(this.j = this.i + 1 + 3*this.k ; this.j< this.clients.length + 1; this.j++ ){
this.distances.push(this.i- 1 + 3*this.k);
this.distances.push(this.j - 1);
this.distances.push(data.data.split('elements')[this.i].split('duration')[this.j].split('value" : ')[1].split(' ')[0]);
}
}
}
});
注意:我没有测试上面的代码,因此可能会出现一些错误。希望对您有帮助。