我想为MMA应用创建自动标记脚本。为此,我通过regexp查看文章,找到名字和姓氏,然后将匹配推送到数组
var arr = [],
s = "Самолет из Лондона уже час, как приземлился, а красавицы-чемпионки Уимблдона все никак не появляются в зале прилета. Мимо успели прошмыгнуть футболисты детской красноярской команды, бывший игрок волейбольной сборной России Роман Яковлев с сыном Дмитрием (пока выступающим на молодежном уровне), и даже актер Олег Тактаров – явно слегка удивленный наличием камер в аэропорту, но облегченно вздохнувший, когда понял, что пресса собралась не по его душу. Еще и Лиото Мачида был там",
re = /([А-Я][А-Яа-я]+(?=\s[А-Яа-я])(?:\s[А-Я][А-Яа-я]+)+)/g,
item;
var final_arr = [];
while (item = re.exec(s))
arr.push(item[1]);
// arr = ['РоманЯковлев','ОлегТактаров','ЛиотоМачида']
这可能是战士还是没有。要检查它,我正在向API发送请求。如果匹配我有200状态和json,如果不匹配404:
for(var i = 0; i < arr.length; i++) {
var sss = encodeURIComponent(arr[i]);
var options = {
url: 'https://------------------/get_fighter/'+sss,
method: 'GET',
}
rp(options)
.then(function (body) {
var json = JSON.parse(body);
var rus_name = json.rus_name;
var vmeste_name = json.vmeste_name;
console.log(vmeste_name)
final_string = s.replace(rus_name, rus_name+'(#'+vmeste_name+')');
console.log(final_string);
})
.catch(function (err) {
// API call failed...
});
如果db中有多个战斗机,现在我遇到了问题。我如何使用final_string的最后一次迭代?
答案 0 :(得分:0)
var process_acquired_data = function(str){
// do stuff with the final string
}
var processed_response_counter = 0; // added
var final_string = s; // added
for(var i = 0; i < arr.length; i++) {
var sss = encodeURIComponent(arr[i]);
var options = {
url: 'https://------------------/get_fighter/'+sss,
method: 'GET',
}
rp(options)
.then(function (body) {
var json = JSON.parse(body);
var rus_name = json.rus_name;
var vmeste_name = json.vmeste_name;
console.log(vmeste_name)
final_string = final_string.replace(rus_name, rus_name+'(#'+vmeste_name+')'); // changed
console.log(final_string);
processed_response_counter++;
if(processed_response_counter == arr.length){
process_acquired_data(final_string);
}
})
.catch(function (err) {
// API call failed...
});
}
发生什么事了?首先我将final_string设置为s的值。然后.replace(...)将在final_string上完成。因为每当你调用s.replce(...)时,你都不会包含之前替换的值,因为你永远不会重置s。 另一方面,我已经为你已经收到的所有回复添加了一个计数器。如果我理解正确,那么您现在所有的回复都会回来......这意味着目前所有回复都会回来,您想要处理数据。因此我添加了一个回调函数(process_acquired_data),它将处理给定的字符串。在这种情况下,在做出所有回复之后。为什么我没有使用&#34;我&#34;作为柜台?很简单,当循环迭代时(例如,慢速互联网连接),可能会发生响应仍处于未决状态。
请记住,当您使用回调时,代码将异步运行。这意味着您不知道WHEN(关于时间点的代码在哪个时间)将处理回调。如果要返回数据。使用未来(在JS中它被称为我认为的承诺,并且有一个具有该名称的库)。
我希望有所帮助。