Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何调用Promise函数系列?_Javascript_Function_Asynchronous_Async Await_Promise - Fatal编程技术网

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
它将返回承诺并使该承诺成为链的一部分。如果我的答案解决了您的问题,请单击我的答案旁边的灰色复选标记以接受它,谢谢!如果我的答案解决了您的问题,请单击我的答案旁边的灰色复选标记接受它,谢谢!