【问题标题】:NODE.JS, MONGOOSE, JAVASCRIPT - value from promise doesn't even return null or undefinedNODE.JS, MONGOOSE, JAVASCRIPT - 来自 promise 的值甚至不返回 null 或 undefined
【发布时间】:2018-08-30 21:12:38
【问题描述】:

美好的一天,我想知道我的代码背后的错误,

所以首先我有这个 db.js 代码:

/** check if may fb_id */
module.exports.checkfbid =
    async(model, query) => {
        return new Promise((resolve, reject) => {
            if (!query) {
                query = {};
            }
            console.log("pumasok sa checkfbid"+ JSON.stringify(query));
            console.log("pumasok sa checkfbid" + query);
            model.find(query)
                .then(res => {
                    console.log("hindi pa napapalitan: "+res);
                    if(null){
                        resolve(null);
                    }else{
                        console.log("untouched: " + res);
                        resolve(res);
                    }

            })
            .catch(err => {
                console.log("rejected si branch" + err);
                reject(err);
                console.log(err);
                throw err;
            });
    });
}

还有这个 controller.js 代码

const id_result = await usersessionDB.checkfbid(model, {fb_id: id});// store sa id_result
        console.log("id_result have: " + id_result);// log kung may nkukuha na laman
        if (id_result === null) {// kung null si id_result, create ka new user
              ...
            }
        } else {// else kung hindi null si id_result
              ...
        }

编辑! console.logs 的示例输出

请忽略外国的、不可读的 cmets。 如你看到的, console.log("pumasok sa checkfbid"+ JSON.stringify(query)); 显示来自控制器的查询,但是当它进入 promise 查询时,我使用了

console.log("hindi pa napapalitan: "+res);
                    if(null){
                        resolve(null);
                    }else{
                        console.log("untouched: " + res);
                        resolve(res);
                    }

它不显示东西!?我已经卡了将近 3 个小时了。

总结一下,我的问题是,如果 promise 返回的值甚至没有返回 null 或 undefine,我该如何定义它是 null 还是 undefine?它只是空白吗?还是反过来,它返回一个值,但是什么样的值?空白的? 谢谢。

【问题讨论】:

  • 您的代码对我来说看起来不错。 res 不是字符串,它是一个对象,尝试以这种方式记录它:console.log("untouched: " , res) 和 id_result 相同:console.log("id_result have: " , id_result)
  • 它现在显示,[](空方括号)hindi pa napapalitan: [] untouched: [] id_result have: [],但感谢 Jeremy Thille,我现在可以检测它是否为空我更改了if(Object.keys(res).length === 0){ res = null; resolve(res); }else{ console.log("untouched: ", res); resolve(res); },我的逻辑现在可以工作了
  • 啊酷,很高兴我能帮上忙 :)

标签: javascript node.js mongoose restify


【解决方案1】:

我不确定您是否有意这样做,但您正在运行针对 null (if(null) {...) 的条件语句,这总是会产生错误的响应。

你是说if(!res) {...吗?

更好的方法是删除您的 if 语句并使用: resolve(res ? res : null)

【讨论】:

  • 添加评论提问,问题不是答案。
  • 是的,这是我将 null 放入 res 变量的另一种方式。但它也会产生相同的输出。
  • 这不应该被否决。我要说的问题是,如果你有条件地检查 null,它永远不会到达那个块。
  • @Kenyanke 如果您更仔细地阅读原始答案,您会发现我在建议中嵌入了解决方案。我提供的更新答案也提供了另一种选择。我们不应该因为答案中有问号就认为没有答案。
猜你喜欢
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 2020-07-11
相关资源
最近更新 更多