gpt4 book ai didi

javascript - Promise 循环 (bluebird) - 将对象包装在异步中

转载 作者:行者123 更新时间:2023-12-03 10:45:57 24 4
gpt4 key购买 nike

我有一个关于 promise 的问题。

我正在使用 Bluebird Promise 库并用它构建一个小型异步

我正在尝试使用函数来实现瀑布式 promise 。

假设我像这样使用 promise :

Promise.resolve()
.then(function () {
console.log("called 1")
return 1;
}).then(function () {
return new Promise (function (res, rej) {
setTimeout(function () {
console.log("called 2")
res(2);
}, 1500);
});
}).then(function () {
console.log("called 3")
return 3;
});

这实际上是在循环中等待并按顺序返回 1,2,3。

如何将它包装到一个函数中,以便我可以执行如下操作:

a();b();c();a().b().c(); 其中 a() 将某些内容放入一条链,b()将一些东西放到链上,c()按顺序将一些东西放到链上。

由于 then() 返回一个新的 Promise,它可能会全部乱序,所以类似不起作用:

var promise = Promise.resolve();
function a () {
promise.then(function () {
// do sync/async
});
}
function b () {
promise.then(function () {
//do sync/async
});
}
function c ...

感谢您的宝贵时间:]

I'm not sure what the goal is here. Do you want to have an arbitrary number of things run in sequence where the sequence is known in advance? Or is this a case where the sequence is discovered as you go? The NodeJS streams interface is a lot better for processing an unknown number of things sequentially (@tadman)

序列是可发现的,目标是能够调用 a().b().c()b().a().d()。客户端的异步库。

更新:如果我按照@zerkms所说的那样操作,它就不会按预期工作。我的不好,应该可以正常工作,但是由于缺乏上下文/代码,没有给我足够的信息来扩展。还是谢谢你的回答,让我有了更多的思考。

更新:查看我的回答

最佳答案

您可以使用 scoped prototype然后添加这些方法

Promise.prototype.a = function() {
return this.then(function() {
console.log("called 1")
return 1;
});
};

Promise.prototype.b = function() {
return this.delay(1500).then(function() {
console.log("called 2")
return 1;
});
};

Promise.prototype.c = function() {
return this.then(function() {
console.log("called 3")
return 3;
});
};

我用它来创建简洁的 DSL,例如使用 git:

https://gist.github.com/petkaantonov/6a73bd1a35d471ddc586

关于javascript - Promise 循环 (bluebird) - 将对象包装在异步中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28571510/

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