Here's my (perhaps naive) solution, assuming you always get some sort of response (or error callback) from the external service:
class B {
int counter;
function2(Callback callback) {
counter = n;
foreach item 1 - n {
//send stuff to external service, service responds in onResponseOrError
}
}
onResponseOrError() {
--counter;
if (counter == 0)
callback.onFunction2Done();
}
}