试图简化我的代码以显示我的问题。
var rp = require('request-promise');
var ids = [];
runmyFunction();
runmyFunction();
function runmyFunction() {
var id = 5;
console.log("runmyFunc: "+ids);
if (ids.indexOf(id)==-1){
myFunction(id);
}
}
function myFunction(id) {
var options = {
uri: 'someURI'
, headers: {
'User-Agent': 'Request-Promise'
}
, json: true
};
rp(options)
.then(function (response) {
ids.push(5);
console.log("myFunc: "+ids);
})
.catch(function (err) {
console.log(err);
});
}
基本上我有这个函数runmyFunction
,如果其中没有id 12345,它应该只执行myFunction
。因此,如果我运行10次并且返回第11个id 12345,它应该停止运行该函数。
问题是即使请求成功,id也不会被推入数组中。
类似的问题与异步请求有关。这也是我的代码中的原因吗?
//编辑我玩了它并编辑了代码。当前代码将其记录到控制台中:
runmyFunc:
runmyFunc:
myFunc:5
myFunc:5,5
所以这是因为它是异步的。有什么想法可以避免吗?
答案 0 :(得分:0)
不确定,但我认为您的问题可以通过使用int values[] = { 2, 5, 1, 3, 4, 0, 6, 2, 5 };
quicksort(values, 0, 8, 2, &smaller);
quicksort(values, 1, 7, 2, &bigger);
帮助来解决:
.bind()
答案 1 :(得分:0)
感谢@Shilly,我通过添加另一个数组找到了自己的解决方案。
var rp = require('request-promise');
var ids = [];
var idstmp = [];
runmyFunction();
runmyFunction();
function runmyFunction() {
var id = 5;
if (ids.indexOf(id) == -1 && idstmp.indexOf(id) == -1) {
console.log("I was here.");
idstmp.push(id);
myFunction(id);
}
}
function myFunction(id) {
var options = {
uri: 'someURI'
, headers: {
'User-Agent': 'Request-Promise'
}
, json: true
};
rp(options)
.then(function (response) {
idstmp.splice(idstmp.indexOf(id), 1);
ids.push(id);
console.log("myFunc: " + ids);
})
.catch(function (err) {
idstmp.splice(idstmp.indexOf(id), 1);
});
}
这样做只是添加了正在使用的ID'通过请求到另一个数组,所以它在使用时遇到阻塞。这是一个很好的解决方法,但对我有用。