我有一系列ajax调用,它们逐个执行。在任何ajax调用失败之间它应该失败像瀑布这样的剩余调用。
var waterfallData = [{
"name":"nodejs"
},{
"name":"javascript"
},{
"name":"angularjs"
},{
"name":"mongodb"
}];
function wf(data,cb){
if(data.name == "angularjs"){
cb(null,"error");
}else{
cb(data,null);
}
}
var finalData = {
"dataCheck":""
}
waterfallData.forEach(function(checkData) {
wf(checkData,function(result){
console.log(result);
return true;
},function(err){
console.log("error",err);
return false;
})
});
这里它正在作为系列调用执行。但我不想使用异步瀑布。
我想在任何情况下失败时停止循环。谁可以帮我这个事。 提前谢谢
答案 0 :(得分:1)
如果他们是ajax调用,那么你应该使用带有Fetch和Promises的代码。将代码放入异步函数,然后执行:
for (obj of waterfallData) {
const response = await obj.name; // or whevever you get the URL from
if (!response.ok) {
// the response failed for some reason,
// break out of this iteration and do not do any more iterations:
break;
}
const responseText = await response.text();
// do other stuff with the responseText
}
答案 1 :(得分:1)
您可以宣传您的wf
功能,并使用 for-loop
waterfallData
function promiseWF( data )
{
return new Promise( ( resolve, reject ) => {
if( data.name == "angularjs"){
reject(null,"error");
}
else{
resolve(data,null);
}
});
}
现在,您可以将简单的 for-loop 与successFlag
async function waterFallInSequence()
{
var successFlag = true;
for (var counter = 0; successFlag && counter < waterfallData.length; counter++)
{
await promiseWF( waterfallData[ counter ] )
.then( ( result ) => {
console.log( result );
})
.catch( ( error ) => {
console.log( error );
successFlag = false; //make this flag false so that for-loop fails
})
}
}