【问题标题】:Resolve not returning from promise解决不从承诺中返回
【发布时间】:2019-03-21 03:50:33
【问题描述】:

我在处理 Promise 和导出到另一个文件时遇到问题。我需要从一个文件中获取一些数据并将其返回给另一个文件,但我无法使其正常工作。我做错了什么?

// Imap.js

var getCode = new Promise(function(resolve, reject) {
  imaps.connect(config).then(function(connection) {

    return connection.openBox('INBOX').then(function() {
      var searchCriteria = [
        'UNSEEN'
      ];

      var fetchOptions = {
        bodies: ['HEADER', 'TEXT'],
        markSeen: false
      };

      return connection.search(searchCriteria, fetchOptions).then(function(results) {
        var subjects = results.map(function(res) {
          return res.parts.filter(function(part) {
            return part.which === 'HEADER';
          })[0].body.subject[0];
        });

        console.log(subjects[0]);
        resolve(subjects[0]);
      });
    });
  });
});

exports.getCode = getCode;

var imap = require('./imap.js');
impa.getCode.then(function(subj) {
  console.log(subj);
})

【问题讨论】:

  • 在 Promise 执行器中包含 .then 无疑是 Promise 构造函数反模式的标志
  • promise 中的imapsconfig 是什么?似乎随机未定义的变量可能会导致问题

标签: javascript ecmascript-6 promise


【解决方案1】:

您在var imapimpa.then 之间有错字:

var imap = require('./imap.js');
imap.getCode.then(function(subj) {
  console.log(subj);
});

【讨论】:

  • 啊啊啊就是这样!谢谢。
  • 没问题@trever。
  • getCode 是一个函数吗?我是中风还是什么的,我敢打赌getCode 是一个承诺 - 基于var getCode = new Promise
  • 对不起@JaromandaX,我没有意识到 - 我已经习惯了返回承诺的函数。
  • 然而,显然这是正确的答案 - 我仍在摸不着头脑 为什么,更重要的是,如何你设法当问题中的代码意味着 imap.getCode 是 Promise 而不是 Function 时,请做对:p - 做得好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2016-07-20
  • 1970-01-01
  • 2021-05-25
  • 2016-08-19
  • 2013-05-15
  • 1970-01-01
相关资源
最近更新 更多