내 코드를 단순화하여 내 문제점을 표시하려고 시도했습니다. 콜백에서 전역 변수 설정
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);
});
}
는 기본적으로 나는 거기에 ID 12345가없는 경우에만
myFunction
을 실행해야이 기능
runmyFunction
을 보유하고 있습니다. 그래서 만약 내가 그것을 10 번 실행하고 11 번째 id 12345가 반환되면 함수 실행을 중단해야합니다. 문제는 요청이 성공하더라도 배열에서 푸시되지 않는다는 것입니다.
비슷한 문제가 비동기 요청과 관련이있었습니다. 이것이 내 코드에서도 마찬가지입니까?
// 편집 나는 그것과 함께 놀아서 코드를 편집했다. 현재 코드는 콘솔에 다음을 기록합니다 :
runmyFunc:
runmyFunc:
myFunc:5
myFunc:5,5
비동기이기 때문에이 코드를 콘솔에 기록합니다. 그 아이디어를 피하기 위해?
ID는 요청에서 나온 것이므로 실제로 요청 ID를 확인하기 전에 확인할 수 없습니다. 다른 논리를 찾아야합니다. – Shilly
죄송 합니다만, 함수가 여러 번 실행되고 id가 배열에있는 경우 중지하도록 분명히하지 않았습니다. 나는 그것을 바로 잡았다. – Trojan
ID를 하나씩 호출하는 경우 각 ID가 도착한 후 확인을 실행하십시오. 12345가 아니면 myFunction이 다시 트리거됩니다. 추신 : 귀하의 ID가 실제로 귀하가받는 데이터에 있는지 확인 했습니까? – Shilly