function test(flag, cb) { cb(flag) console.log('finish')}
cb
是回调函数,我想要先执行cb
,再执行后面test
中一些逻辑
这个如何改为Promise
写法,不使用setTimeout
、requestAnimationFrame
能得到下面的使用效果
test2(false).then(flag => { console.log('cb call')})// -> cb call// -> finish
function test2(flag) { return { then: function (cb) { return new Promise(function (resolve, reject) { try { cb(); console.log('finish'); resolve(); } catch (e) { reject(e); } }); } }}(async function () { await test2(false).then(() => { console.log('cb call'); });})();
then还是改名before更好
function cb(flag) { return new Promise((resolve)=>{ setTimeout(()=>{ console.log(flag) // 这行代码不能是异步的 resolve() },1000) })}async function test(flag, cb) { await cb(flag) console.log('finish')}function test2(flag,cb){ cb(flag).then(()=>{ console.log('finish') })}test('sss', cb)
不太确定你的需求,按我的理解,如果你需要执行异步的cb再执行finish,那就要在cb中使用promise,提供一个写法,test和test2效果是一样的。
返回一个 promise
就好了呀。
function test(flag) { return new Promise((resolve, reject) => { setTimeout(() => flag ? resolve(flag) : reject(flag), 2000) })}test(true).then(res => { console.log('test.then =>', res)}).catch(err => { console.log('test.catch =>', err)})
没完整看完问题描述,你这个就是没有正确理解 链式调用 才会提出来的问题呀。
所以其实你需要 Promisify
的其实是 cb
这个函数,而不是 test
这个函数啊。
很简单,把你本该写回调的地方,写上promise的resolve即可
function test(flag) { return new Promise(resolve => { resolve(flag) console.log('finish') })}
但是你希望执行完cb call
再执行finish
这根本不是promise
可以解决的场景
因为resolve
那会进入微任务
console.log('finish')
那儿不会等待因resolve
之后触发then里回调执行完再执行
问题内容: 我想使用Promise,但是我有一个类似以下格式的回调API: 1. DOM加载或其他一次事件: 2.普通回调: 3.节点样式回调(“ nodeback”): 4.带有节点样式回调的整个库: 如何在Promise中使用API,如何“承诺”呢? 问题答案: 承诺具有状态,它们从待定状态开始,可以解决: fulfilled成 意味着计算成功完成。 fulfilled 表示计算失败。 承
问题内容: 我正在使用播放框架和Apache Kafka。 我有一个POST方法,它将消息发送到Kafka。Kafka有一个API方法 public java.util.concurrent.Future send(ProducerRecord记录,回调回调) 其中Javadoc说 异步将记录发送到主题,并在确认发送后调用提供的回调。 我正在使用play框架公开此功能。我想从Controller方
我正在使用play框架和Apache Kafka。 我有一个POST方法,它向Kafka发送消息。Kafka有一个API方法 公共java.util.concurrent。未来发送(生产记录记录、回调) 其中Javadoc说 异步发送记录到主题,并在发送被确认时调用提供的回调。 我将使用play框架公开此功能。我想返回一个<代码>promise
问题内容: 我想使用Promise,但是我有一个类似以下格式的回调API: 1. DOM加载或其他一次事件: 2.普通回调: 3.节点样式回调(“ nodeback”): 4.带有节点样式回调的整个库: 如何在promise中使用API,如何“承诺”它? 问题答案: 承诺有状态,它们从待定状态开始,可以解决: 完成 意味着计算成功完成。 拒绝 表示计算失败。 承诺返回函数 绝不应该抛出,而应该
问题内容: 以下函数从url获取图像并进行加载,然后返回其宽度和高度: 问题是,如果我做这样的事情: 我得到,因为该函数运行但图像尚未加载。 仅当照片已加载且宽度和高度已可用时,如何使用等待/异步返回值? 问题答案: 如何使用/ 将此回调函数转换为Promise? 你不知道与往常一样,您可以使用构造函数。没有语法糖。 仅当照片已加载且宽度和高度已经可用时,如何使用/ 记录值? 你可以做
我现在是将方法A定义在被写入的文件里,然后 {a:'${A}'},在写入之前将'${}',给删了;但有没有简洁一点的方法呢? process 如何编写?