Javascript 如何调用Promise函数系列?
要求在转到下一个调用之前完成当前函数:Javascript 如何调用Promise函数系列?,javascript,function,asynchronous,async-await,promise,Javascript,Function,Asynchronous,Async Await,Promise,要求在转到下一个调用之前完成当前函数: var current_data = something; Run(current_data).then((data1) => { Run(data1).then(data2 => { Run(data2).then(data3 => { // and so on }) }) }); 只有当我确切地知道要获取多少数据时,上面的示例才可能出现。为了使嵌套的承诺成为承诺
var current_data = something;
Run(current_data).then((data1) => {
Run(data1).then(data2 => {
Run(data2).then(data3 => {
// and so on
})
})
});
只有当我确切地知道要获取多少数据时,上面的示例才可能出现。为了使嵌套的承诺成为承诺链的一部分,您需要返回嵌套的承诺
Run(current_data).then((data1) => {
return Run(data1).then(data2 => {
return Run(data2).then .....
});
});
为了使嵌套的承诺成为承诺链的一部分,您需要返回嵌套的承诺
Run(current_data).then((data1) => {
return Run(data1).then(data2 => {
return Run(data2).then .....
});
});
我假设您的数据已分页,您不知道有多少页,因此可以在
异步函数中使用while
循环和wait
,如下所示:
(async function() {
var currentData = someInitialData;
// loop will break after you've processed all the data
while (currentData.hasMoreData()) {
// get next bunch of data & set it as current
currentData = await Run(currentData);
// do some processing here or whatever
}
})();
我假设您的数据已分页,您不知道有多少页,因此可以在异步函数中使用while
循环和wait
,如下所示:
(async function() {
var currentData = someInitialData;
// loop will break after you've processed all the data
while (currentData.hasMoreData()) {
// get next bunch of data & set it as current
currentData = await Run(currentData);
// do some processing here or whatever
}
})();
您可以使用asyncwait使代码更具可读性
async function getData(current_data){
let data1 = await Run(current_data)
let data2 = await Run(data1);
let result = await Run(data2);
return result;
}
调用getData函数
getData(data)
.then(response => console.log(response))
.catch(error => console.log(error));
您可以使用asyncwait使代码更具可读性
async function getData(current_data){
let data1 = await Run(current_data)
let data2 = await Run(data1);
let result = await Run(data2);
return result;
}
调用getData函数
getData(data)
.then(response => console.log(response))
.catch(error => console.log(error));
尽量避免重复承诺。如果您需要调用一系列的承诺,这取决于前一个调用的响应,那么您应该像下面那样进行链接-
const promise1=新承诺((解决、拒绝)=>{
设置超时(()=>{
决议(“foo”);
}, 1000);
});
承诺1.然后((回应)=>{
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
解析(响应+b');
}, 1000);
});
}).然后((响应b)=>{
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
解析(responseB+c');
}, 1000);
});
}).然后((响应)=>{
console.log(responseC);/“foo b c”
})
尽量避免重复承诺。如果您需要调用一系列的承诺,这取决于前一个调用的响应,那么您应该像下面那样进行链接-
const promise1=新承诺((解决、拒绝)=>{
设置超时(()=>{
决议(“foo”);
}, 1000);
});
承诺1.然后((回应)=>{
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
解析(响应+b');
}, 1000);
});
}).然后((响应b)=>{
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
解析(responseB+c');
}, 1000);
});
}).然后((响应)=>{
console.log(responseC);/“foo b c”
})
如果您在不同的数据上反复执行相同的函数,我将创建一个递归函数,返回一个承诺
我只是看看我下面的例子,使用一个数字数组,你可以编辑它到你当前的情况
var当前_数据=[1,2,4,5,6]
函数运行(数据){
如果(data.length==0)
返回承诺。解析(数据);
返回新承诺((解决、拒绝)=>{
//您的异步操作
//请等待一秒钟,然后再解析
设置超时(()=>{
data.pop()
console.log(数据)
解析(数据)
},1000)
})
。然后((结果)=>{
返回运行(结果)
})
}
Run(current_data)
如果在不同的数据上反复执行同一个函数,我将创建一个递归函数,返回一个承诺
我只是看看我下面的例子,使用一个数字数组,你可以编辑它到你当前的情况
var当前_数据=[1,2,4,5,6]
函数运行(数据){
如果(data.length==0)
返回承诺。解析(数据);
返回新承诺((解决、拒绝)=>{
//您的异步操作
//请等待一秒钟,然后再解析
设置超时(()=>{
data.pop()
console.log(数据)
解析(数据)
},1000)
})
。然后((结果)=>{
返回运行(结果)
})
}
运行(当前_数据)
返回和不返回之间的区别是什么?如果不在中添加返回,则回调函数将创建承诺并返回未定义的
。但是,如果添加return
,它将返回承诺并使该承诺成为链的一部分。return和not之间有什么区别?如果不在中添加return,则
回调,函数将创建承诺并返回未定义的。但是,如果您添加return
它将返回承诺并使该承诺成为链的一部分。如果我的答案解决了您的问题,请单击我的答案旁边的灰色复选标记以接受它,谢谢!如果我的答案解决了您的问题,请单击我的答案旁边的灰色复选标记接受它,谢谢!