【发布时间】:2016-07-11 14:30:25
【问题描述】:
试图简化我的代码以显示我的问题。
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 也永远不会被推送到数组中。
类似的问题与异步请求有关。这也是我代码中的原因吗?
//edit 我玩弄了它并编辑了代码。当前代码将其记录到控制台中:
runmyFunc:
runmyFunc:
myFunc:5
myFunc:5,5
这是因为它是异步的。有什么想法可以避免这种情况吗?
【问题讨论】:
-
由于 id 来自请求,因此您永远无法在实际获得请求 id 之前检查它们。您需要找到其他逻辑。
-
抱歉,我没有明确表示我希望函数多次运行并在 id 在数组中时停止。我更正了。
-
如果你是一个一个地调用 id,在每个 id 到达后运行检查。如果不是 12345,让 myFunction 再次触发。 PS:您是否检查过 id 是否真的在您收到的数据中?
-
上面的代码是我真正问题的抽象。我得到一个带有随机 id 的 json 对象(是的,它在那里),并试图检查我是否没有使用这个 id 再次运行该函数。再次尝试使代码更清晰。
-
完全删除runmyfunc函数并用
function(response){ ids.push(response.data.id); if(ids.indexOf('12345') == -1) myFunction(); }替换'then'函数怎么样?如果你想在调用下一个之前创建一个同步流来检查每个id,你甚至不需要promise .是的,您当前的结果是正确的,因为您在第一次调用返回之前调用了 runmyfunc 两次。
标签: javascript node.js callback request