我试图更好地理解" continuation-passing style"
转换同步代码
function loadAvatarImage(id) {
var profile = loadProfile(id);
return loadImage(profile.avatarUrl);
}
要异步
function loadAvatarImage(id, callback) {
loadProfile(id, function (profile) {
loadImage(profile.avatarUrl, callback);
});
}
loadProfile
如何在第二个参数中传递profile
,在调用loadProfile
之前等待loadImage(profile.avatarUrl, callback)
如何解决?
答案 0 :(得分:0)
本文暗示每个函数都应该是异步的。
因此,loadProfile
函数也需要callback
function loadProfile(id, callback) { ... }
现在“that”函数应该异步执行,完成后再调用回调函数。 通常在AJAX中加载数据,或者。
从前几段开始,作者似乎没有做任何实际异步的事情。它只是具有回调的递归函数。但这一切都是同步发生的,除非你在某个地方进行了异步(或延迟)调用,这与给出的第一个例子不同。
javascript中异步编程的另一种方法是通过Promise对象。
答案 1 :(得分:0)
loadProfile如何在第二个参数的profile中传递,在调用loadImage(profile.avatarUrl,callback)之前,它如何知道等待loadProfile解析?
这些方面的东西:
function loadProfile( id, callback ) {
var picture = '¯\_(ツ)_/¯';
// setTimeout to simulate any other async process, like fetching an image
setTimeout( function ( ) {
// Calls callback after 1 second
callback( picture );
}, 1000 );
}