在JavaScript中使用异步函数

时间:2017-07-21 13:27:52

标签: javascript asynchronous google-chrome-extension

所以下一个函数应该在预先存储的数组中搜索,在chrome存储中,某个索引等于当前日期:

function comparingDates(fn) {
var currentDate = new Date();
var j;
chrome.storage.sync.get("storeDates", function comparing(items) {
        if (!chrome.runtime.error) {
            var arrayDates = items.storeDates;
            j = arrayDates.findIndex(x => x.date == currentDate.getDate());
            console.log(j);
           fn(j);
        };
   });
};

使用fn作为发送此回调的相应索引的函数:

comparingDates(function (l1) {
        if (!l1) {
            console.log("error");
        } else {
           currentDay = l1;
            console.log("succes");
        };

之前声明变量currentDay

运行函数并发送值后,采用l1未定义的条件。

如果错误发生,很难掌握如何处理异步函数。并且对它进行一些搜索,没有为实际参考提供好的例子。

1 个答案:

答案 0 :(得分:1)

findIndex返回-1表示未找到,如果你要做

if (-1) console.log("Is Truthy")

你会得到控制台线。如果项目在第一个索引(也就是0)中,那么检查也会失败。

你应该检查-1,而不是真正的。

  comparingDates(function (l1) {
    if (l1===-1) {
      console.log("error");
    } else {
      currentDay = l1;
      console.log("success");
    }
  });

如果你这么说

  var l1;
  comparingDates(function (l1) {
    if (l1===-1) {
      console.log("error");
    } else {
      currentDay = l1;
      console.log("success");
    }
  });
  console.log(l1) <-- is undefined

问题就是你在订购比萨饼时遇到的问题,当你挂断电话时,你会尝试吃披萨。函数后面的代码不会等待回调运行。这就是为什么我们有回调等待订单交付。逻辑需要在那里完成。