gpt4 book ai didi

javascript - 通过 Promise 对异步操作进行排队

转载 作者:行者123 更新时间:2023-12-03 08:52:00 25 4
gpt4 key购买 nike

我发现一篇文章解释了如何对异步操作进行排队,但它相当模糊,因为它说如果您从 then 函数返回一个“类似 promise ”的对象,它将进行下一个然后等待它完成。我不知道“类似 promise ”是什么意思,所以我尝试了一下(参见下面的代码),它有效,但我不确定这是否是执行此操作的正确方法。

let promise = new Promise(function (resolve, reject) {
someAsyncOperation(function () {
resolve({done: true});
});
});

promise.then(function (val) {
return new Promise(function (resolve, reject) {
anotherAsyncOperation(function () {
resolve({doneAgain: true});
});
});
}).then(function (val) {
// This only occurs after the anotherAsyncOperation is done
});

最佳答案

是的,您的代码应该能够创建一个等待 anotherAsyncOperation 完成的 Promise。

let promise = new Promise(function(resolve, reject) {
console.log('1');
someAsyncOperation(function() {
resolve({ done: true });
});
}).then(function(val) {
// val == { done: true }
return new Promise(function(resolve, reject) {
console.log('2');
anotherAsyncOperation(function() {
resolve({ doneAgain: true });
});
});
}).then(function(val) {
// val == { doneAgain: true }
console.log('3');
});

@Amit 的意思是您可以创建回调式异步操作的“Promisified”版本。

function promisify( operation ) {
return function( ) {
return new Promise(function(resolve, reject) {
operation(function( err, val ) {
if (err) reject(err);
else resolve(val);
});
});
};
}

var someAsyncOp = promisify( someAsyncOperation );
var anotherAsyncOp = promisify( anotherAsyncOperation );

console.log('1');
var promise = someAsyncOp()
.then(function( val ) {
console.log('2');
return anotherAsyncOp();
})
.then(function( val ) {
console.log('3');
});

请注意,有些 Promise 库具有比我展示的更好的 promisify 函数。请使用其中之一。

关于javascript - 通过 Promise 对异步操作进行排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32640859/

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