gpt4 book ai didi

javascript - 如何串联 Promise

转载 作者:行者123 更新时间:2023-12-03 04:28:55 26 4
gpt4 key购买 nike

我想串联一系列 Promise,以便按顺序执行 3 个 Promise。我不想嵌套函数。我尝试向其中添加解析,但似乎它在函数内部的所有内容完成之前解析。

function first(){
var promise = new Promise(function(resolve, reject){
console.log('fetchToken 1');
});
return promise;
}

function second(item){
var promise = new Promise(function(resolve, reject){
console.log('fetchToken 2');
});
return promise;
}

function third(item){
var promise = new Promise(function(resolve, reject){
console.log('fetchToken 3');
});
return promise;
}

function getTokenGroup() {
function logTaskError(e) {
console.error(e);
throw e; // reject the Promise returned by then
}
var task1 = first();
var task2 = task1.then(second);
var task3 = task2.then(third);
var alltasks = task3.then(null, logTaskError);

return alltasks;
}

getTokenGroup();

最佳答案

在函数内部调用resolve,以便 promise 得到解决

function first() {
var promise = new Promise(function(resolve, reject) {
console.log('fetchToken 1');
resolve();
});
return promise;
}

function second(item) {
var promise = new Promise(function(resolve, reject) {
console.log('fetchToken 2');
resolve();
});
return promise;
}

function third(item) {
var promise = new Promise(function(resolve, reject) {
console.log('fetchToken 3');
resolve();
});
return promise;
}

function getTokenGroup() {
function logTaskError(e) {
console.error(e);
throw e; // reject the Promise returned by then
}
var task1 = first();
var task2 = task1.then(second); // why return new promise
var task3 = task2.then(third);
var alltasks = task3.then(null, logTaskError);

return alltasks;
}

getTokenGroup();

或者更好,因为可以使用 then 继续第一个 promise

function first() {
console.log('fetchToken 1');
}

function second(item) {
console.log('fetchToken 2');
}

function third(item) {
console.log('fetchToken 3');
}

function getTokenGroup() {
function logTaskError(e) {
console.error(e);
throw e; // reject the Promise returned by then
}
var promise = Promise.resolve(0); // create a resolved promise
var task1 = promise.then(first);
var task2 = task1.then(second);
var task3 = task2.then(third);
var alltasks = task3.then(null, logTaskError);

return alltasks;
}

getTokenGroup();

关于javascript - 如何串联 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43578221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com