Javascript 按同步承诺行事
我有一些javascript函数可以返回承诺。我正在使用Javascript 按同步承诺行事,javascript,asynchronous,es6-promise,Javascript,Asynchronous,Es6 Promise,我有一些javascript函数可以返回承诺。我正在使用。然后对这些函数返回的数据执行操作。但是,以下代码是否保证订单?result2会在result之后得到处理吗 const test = promiseReturningFunction(data); test.then((result) => { doStuff(result); }); const test2 = promiseReturningFunction2(data2); test2.then((result2) =&g
。然后
对这些函数返回的数据执行操作。但是,以下代码是否保证订单?result2
会在result
之后得到处理吗
const test = promiseReturningFunction(data);
test.then((result) => {
doStuff(result);
});
const test2 = promiseReturningFunction2(data2);
test2.then((result2) => {
doStuff(result2);
});
或者应该按照以下内容改写:
const test = promiseReturningFunction(data);
test.then((result) => {
doStuff(result);
}).then(() => {
const test2 = promiseReturningFunction2(data2);
test2.then((result2) => {
doStuff(result2);
});
});
简而言之:是。然后阻塞?否,。然后()
不是阻塞。在第一个代码段中,您不知道是先处理result
,还是先处理result2
您可以尝试语法,它更容易理解:
(async () => {
const result = await promiseReturningFunction(data);
doStuff(result);
const result2 = await promiseReturningFunction2(data2);
doStuff(result2);
})();
wait
表示此代码的执行将停止,直到promiseReturningFunction
返回的承诺得到解决。否,。然后()。在第一个代码段中,您不知道是先处理result
,还是先处理result2
您可以尝试语法,它更容易理解:
(async () => {
const result = await promiseReturningFunction(data);
doStuff(result);
const result2 = await promiseReturningFunction2(data2);
doStuff(result2);
})();
wait
表示此代码的执行将停止,直到promiseReturningFunction
返回的承诺得到解决。第一个是异步的,不保证result2之后的result1
promiseReturningFunction(data);
.then((result) => {
doStuff(result);
})
.then(()=>promiseReturningFunction2(data2))
.then((result2) => {
doStuff(result2);
})
.catch((err)=> /* Error handling **/);
请试试这个结构
确保doStaff不是任何I/O操作,否则您必须让它们承诺可返回函数第一个函数是异步的,不能保证result1在result2之后
promiseReturningFunction(data);
.then((result) => {
doStuff(result);
})
.then(()=>promiseReturningFunction2(data2))
.then((result2) => {
doStuff(result2);
})
.catch((err)=> /* Error handling **/);
请试试这个结构
确保doStaff不是任何I/O操作,否则您必须让它们承诺可返回功能否,然后
对独立承诺的回调顺序不受保证。这对于允许并发处理多个异步任务非常必要
如果您需要一个特定的订单,您需要显式地链接您的承诺回调
在您的情况下,如果您只需要两个doStuff
调用互相后面运行,但希望同时处理两个promiseReturningFunction
s,则可以使用
const p1 = promiseReturningFunction(data);
const p2 = test.then(doStuff);
const p3 = promiseReturningFunction2(data2);
Promise.all([p2, p3]).then((stuff, result2) => doStuff(result2));
如果希望两个promiseReturningFunction
s按顺序运行,则第二个代码段就可以了。否,独立承诺的then
回调顺序不保证。这对于允许并发处理多个异步任务非常必要
如果您需要一个特定的订单,您需要显式地链接您的承诺回调
在您的情况下,如果您只需要两个doStuff
调用互相后面运行,但希望同时处理两个promiseReturningFunction
s,则可以使用
const p1 = promiseReturningFunction(data);
const p2 = test.then(doStuff);
const p3 = promiseReturningFunction2(data2);
Promise.all([p2, p3]).then((stuff, result2) => doStuff(result2));
如果希望两个promiseReturningFunction
s按顺序运行,则第二个代码段就可以了。No,它没有阻塞。如果你想让它们连续执行,把第二个放在第一个的后面。不,这不是阻塞。如果希望它们连续执行,请将第二个放在第一个的内部。