.then不是功能/承诺

时间:2018-09-12 18:46:44

标签: javascript promise

出现错误。那么那不是功能。

当我调用一个函数时,它会像这样:

static BackgroundFinalizer() {
  const items = Store.getStoredItems();
  items.forEach(function (item) { // 0.1
    if (new Date(item.episode) < new Date()) {
      let tvmaze = new Tvmaze();
      tvmaze.getData(item.name).then(data => {
        tvmaze.getEpisodeData(data.data.id).then(data => {
          let newdate = tvmaze.sortByNextEpisode(data);
          Store.removeStoreItem(item.name);
          Store.storeItem2(item.name, newdate);
        });
      });
    } else {}
  });
  return 'promise'
}

功能:

{{1}}

我需要兑现承诺吗?即使函数本身不需要一个?该怎么办?

2 个答案:

答案 0 :(得分:2)

使用前,您需要study promise

static BackgroundFinalizer() {
  return new Promise ( (resolve, reject) => {
    const items = Store.getStoredItems();
    items.forEach(function (item) { // 0.1

        if (new Date(item.episode) < new Date()) {

            let tvmaze = new Tvmaze();

             tvmaze.getData(item.name).then(data => {

                return tvmaze.getEpisodeData(data.data.id);

             }).then(data => {

                     let newdate = tvmaze.sortByNextEpisode(data);
                     Store.removeStoreItem(item.name);
                     Store.storeItem2(item.name, newdate);

             });

        } else {

        }


    });

    resolve('success');
  });
}

答案 1 :(得分:-1)

return 'promise'返回字符串promise,而不是Promise。您需要为您的代码创建一个Promise,类似于我在下面所做的事情:

(请注意,我只是将其插入,没有完整的测试可用;代码中可能还有其他问题。但这应该使您更接近目标)

static BackgroundFinalizer() {
  return new Promise(function(resolve, reject) {
    const items = Store.getStoredItems();
    items.forEach(function(item) { // 0.1
      if (new Date(item.episode) < new Date()) {

        let tvmaze = new Tvmaze();

        tvmaze.getData(item.name).then(data => {

          tvmaze.getEpisodeData(data.data.id).then(data => {

            let newdate = tvmaze.sortByNextEpisode(data);
            Store.removeStoreItem(item.name);
            Store.storeItem2(item.name, newdate);

          });
        });
      } else {
	  };
    });
	
	resolve();
  });
}