Adding to what Patrick says, PnP JS is a wrapper over the existing REST API implementation along with some utilities and helper methods.
It will work the way a native endpoint works, so if an endpoint is not supported in SP 2013, it wont work with PnP JS.
In this specific case, Batch endpoint is not supported in 2013, so it wont work with PnP JS. However, the same endpoint will work with 2016+ and SPO.
Secondly, would suggest to keep using REST API. We do have native Promise.All method which gets resolved once all the promises are done.
You can integrate it with PnP JS something like:
var items = [];
for (var i = 0; i < 100; i++) {
pnp.sp.web.lists.getByTitle("Custom List").items.add({
Title: "Title" + i,
Description: "Description"
});
}
await Promise.all(items).then(function() {
console.log("100 items were created");
});
More info - Promise API
JSOM is kinda deprecated in the sense that MS is not investing in it anymore. If you plan to migrate the solution to 2016+ or SPO, then you should keep using REST IMHO.