Return 通过同步聚合函数调用来实现承诺,使用 setTimeout 驱动回调,基于承诺
Return Promise by Aggregating function calls by synchronous, callback driven using setTimeout, promise based
如何传递等待 setTimeout 完成的回调和 return 承诺。
当从函数传递回调时,在 setTimeout
之后解析函数时,是否可以在此处进行任何调整来解决此问题
或在 promise.all()
之前调用 getB
并准备好结果等
function getA() {
return "A";
}
function getB(callback) {
setTimeout(() => {
callback("B");
}, 10);
}
function getC() {
return Promise.resolve().then(() => "C");
}
function getABC() {
//need to work here only
const cb = (val) => val;
return Promise.all([getA(), getB(cb), getC()]);
}
getABC().then((arr) => console.log(arr));
// expected output [ 'A', 'B', 'C' ]
预期输出为 [ 'A', 'B', 'C' ]
但收到 [ 'A', undefined, 'C' ]
我应该在此处进行哪些更改?
更新以响应 :
function getA () {
return "A";
}
function getB (callback) {
setTimeout(() => {
callback("B");
}, 10);
}
function getC () {
return Promise.resolve().then(() => "C");
}
function getABC () {
const waitForCallback = (invoker) => new Promise(resolve => invoker(resolve));
return Promise.all([getA(), waitForCallback(getB), getC()]);
}
getABC().then(console.log);
原回答:
Return 来自 getB
的承诺:
function getA () {
return "A";
}
function getB (callback) {
return new Promise(resolve => {
setTimeout(() => {
resolve(callback("B"));
}, 10);
});
}
function getC () {
return Promise.resolve("C");
}
function getABC () {
const cb = (val) => val;
return Promise.all([getA(), getB(cb), getC()]);
}
getABC().then(console.log.bind(console));
如何传递等待 setTimeout 完成的回调和 return 承诺。
当从函数传递回调时,在 setTimeout
之后解析函数时,是否可以在此处进行任何调整来解决此问题或在 promise.all()
之前调用 getB
并准备好结果等
function getA() {
return "A";
}
function getB(callback) {
setTimeout(() => {
callback("B");
}, 10);
}
function getC() {
return Promise.resolve().then(() => "C");
}
function getABC() {
//need to work here only
const cb = (val) => val;
return Promise.all([getA(), getB(cb), getC()]);
}
getABC().then((arr) => console.log(arr));
// expected output [ 'A', 'B', 'C' ]
预期输出为 [ 'A', 'B', 'C' ]
但收到 [ 'A', undefined, 'C' ]
我应该在此处进行哪些更改?
更新以响应
function getA () {
return "A";
}
function getB (callback) {
setTimeout(() => {
callback("B");
}, 10);
}
function getC () {
return Promise.resolve().then(() => "C");
}
function getABC () {
const waitForCallback = (invoker) => new Promise(resolve => invoker(resolve));
return Promise.all([getA(), waitForCallback(getB), getC()]);
}
getABC().then(console.log);
原回答:
Return 来自 getB
的承诺:
function getA () {
return "A";
}
function getB (callback) {
return new Promise(resolve => {
setTimeout(() => {
resolve(callback("B"));
}, 10);
});
}
function getC () {
return Promise.resolve("C");
}
function getABC () {
const cb = (val) => val;
return Promise.all([getA(), getB(cb), getC()]);
}
getABC().then(console.log.bind(console));