diff --git a/include/mbgl/storage/response.hpp b/include/mbgl/storage/response.hpp index cf22d9002..e665f177f 100644 --- a/include/mbgl/storage/response.hpp +++ b/include/mbgl/storage/response.hpp @@ -7,7 +7,7 @@ namespace mbgl { class Response { public: - enum Status : bool { Error, Successful }; + enum Status { Error, Successful, NotFound }; Status status = Error; std::string message; diff --git a/platform/node/src/node_request.cpp b/platform/node/src/node_request.cpp index 76cafacbd..fb4d47045 100644 --- a/platform/node/src/node_request.cpp +++ b/platform/node/src/node_request.cpp @@ -64,7 +64,9 @@ NAN_METHOD(NodeRequest::Respond) { auto resource = std::move(nodeRequest->resource); if (info.Length() < 1) { - return Nan::ThrowTypeError("First argument must be an error object"); + auto response = std::make_shared(); + response->status = mbgl::Response::NotFound; + source->notify(*resource, response); } else if (info[0]->BooleanValue()) { auto response = std::make_shared(); diff --git a/src/mbgl/map/raster_tile_data.cpp b/src/mbgl/map/raster_tile_data.cpp index ce26586ff..27094510a 100644 --- a/src/mbgl/map/raster_tile_data.cpp +++ b/src/mbgl/map/raster_tile_data.cpp @@ -33,6 +33,12 @@ void RasterTileData::request(float pixelRatio, req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::getLoop(), [url, callback, this](const Response &res) { req = nullptr; + if (res.status == Response::NotFound) { + state = State::parsed; + callback(); + return; + } + if (res.status != Response::Successful) { std::stringstream message; message << "Failed to load [" << url << "]: " << res.message; diff --git a/src/mbgl/map/vector_tile_data.cpp b/src/mbgl/map/vector_tile_data.cpp index 678a3867c..433208bdf 100644 --- a/src/mbgl/map/vector_tile_data.cpp +++ b/src/mbgl/map/vector_tile_data.cpp @@ -44,6 +44,12 @@ void VectorTileData::request(float pixelRatio, const std::function& call req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::getLoop(), [url, callback, this](const Response &res) { req = nullptr; + if (res.status == Response::NotFound) { + state = State::parsed; + callback(); + return; + } + if (res.status != Response::Successful) { std::stringstream message; message << "Failed to load [" << url << "]: " << res.message;