0

如果我们使用这段代码:

chrome.storage.sync.set({settings: x}, function() {
    console.log('Settings saved');
});

捕获错误的最佳方法是什么,这是正确的方法吗?

chrome.storage.sync.set({settings: x}, function() {
        if (chrome.runtime.lastError) {
          return cb(chrome.runtime.lastError);
        }
        console.log('Settings saved');
        cb(null);
});
4

2 回答 2

0

是的,这是使用所有 chrome 异步 API 捕获错误的最佳方法。

在您的回调中使用try ... catch将无济于事。还,

它是异步的,因此使用try原始 API 调用也无济于事。

于 2018-01-30T00:09:15.717 回答
0

您可以承诺它可以更好地管理错误和回调地狱。

var promisify = function (fn) {
  var args = Array.prototype.slice.call(arguments).slice(1);
  return new Promise(function(resolve, reject) {
    fn.apply(null, args.concat(function (res) {
      if (chrome.runtime.lastError) {
        return reject(chrome.runtime.lastError);
      }
      return resolve(res);
    }));
  });
};

那么您可以按如下方式使用它:

function setStorageItems(items) {
  return promisify(chrome.storage.sync.set, items);
}

setStorageItems({settings: 'x'}).then(function() {
  console.log('settings saved');
})
.catch(function (err) {
  console.error(err);
});
于 2018-01-31T23:49:56.467 回答