code: def save_datasets(self, datasets, compute=True, **kwargs):
          
          results = []
          for ds in datasets:
              results.append(self.save_dataset(ds, compute=False, **kwargs))
  
          if compute:
              LOG.info("Computing and writing results...")
              return compute_writer_results([results])
  
          targets, sources, delayeds = split_results([results])
          if delayeds:
              # This writer had only delayed writes
              return delayeds
          else:
              return targets, sources
docs: Save all datasets to one or more files.
  
          Subclasses can use this method to save all datasets to one single
          file or optimize the writing of individual datasets. By default
          this simply calls `save_dataset` for each dataset provided.
  
          Args:
              datasets (iterable): Iterable of `xarray.DataArray` objects to
                                   save using this writer.
              compute (bool): If `True` (default), compute all of the saves to
                              disk. If `False` then the return value is either
                              a `dask.delayed.Delayed` object or two lists to
                              be passed to a `dask.array.store` call.
                              See return values below for more details.
              **kwargs: Keyword arguments to pass to `save_dataset`. See that
                        documentation for more details.
  
          Returns:
              Value returned depends on `compute` keyword argument. If
              `compute` is `True` the value is the result of a either a
              `dask.array.store` operation or a `dask.delayed.Delayed` compute,
              typically this is `None`. If `compute` is `False` then the
              result is either a `dask.delayed.Delayed` object that can be
              computed with `delayed.compute()` or a two element tuple of
              sources and targets to be passed to `dask.array.store`. If
              `targets` is provided then it is the caller's responsibility to
              close any objects that have a "close" method.