gpt4 book ai didi

javascript - 如何将 promise 加入 promise 链

转载 作者:行者123 更新时间:2023-11-30 16:06:33 26 4
gpt4 key购买 nike

我有 func1 函数返回一个 promise 。在 func2 中,我已经启动了 promise 链。我想在这里做的是,我想在旧的 promise 链中使用 func1 解析消息,我希望这段代码不那么复杂。在 func2

中加入 func1 promise promise 链的最佳方式是什么
var func1 = function(){
return new promise(function(resolve, reject){
//some operations here
});
};

var func2 = function(){
promise.resolve(someFuncSync())
.then(function(){
//this is the old promise chain

func1()
.then(function(message,error){
return message;
//i want use this return value in old promise chain
});

console.log(message);
//printing func1 returned message in old promise chain
})
};

最佳答案

只需从 .then() 处理程序中返回新的 promise,它将自动添加到先前的链中,然后将控制旧 promise 链的解析值。

在新返回的 promise 被解决之前,外部 promise 不会解决,内部 promise 将控制最终解决的值(value)。我在调用 return func1() 之前添加了 return 语句以将其添加到链中:

var func2 = function(){
promise.resolve(someFuncSync())
.then(function(){
//this is the old promise chain

// ADDED return here
return func1()
.then(function(message,error){
return message;
//i want use this return value in old promise chain
});
})
};

我会在您的代码中更改其他几项内容,因为看起来您上面的所有内容都可以提炼为:

var func2 = function () {
someFuncSync();
return func1();
};

这允许你做然后做:

func2().then(function(message) {
// process message here
}, function(err) {
// process err here
});

变更摘要:

  1. 如果 someFuncSync() 始终是同步的,则无需将其包装到 promise 中。您可以直接调用它,然后开始您的 promise 链。
  2. 因为标准 promise 只返回一个值(不是像(message, error)这样的东西,所以真的没有理由在回调中包含return message。你可以直接返回 promise 即可。
  3. func1() 前面添加了 return,以便我们返回 promise 。

关于javascript - 如何将 promise 加入 promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36958845/

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