最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Nodejs承诺待处理

IT培训 admin 16浏览 0评论

Nodejs承诺待处理

我正在尝试为多个Redis连接创建一个构造函数,所以我已经开始尝试一些东西。我只是从Promise {}那里回来,但是如果在返回之前做console.log,我会得到真正的价值。

编辑:在没有异步/等待的情况下尝试仍然无法正常工作。

app.js

const rBredis = require("./redis");
const redis = new rBredis();
console.log(redis.has("kek"));

redis.js

const Redis = require("ioredis");
class BasicRedis {
    constructor() {
        // TODO
    };
    redis = new Redis();
    async has(id) {
        return await this.redis.exists(id)
            .then( exists => {
                // console.log(exists); works 0
                return exists; // works not Promise { <pending> }
            });
    };
}
module.exports = BasicRedis;
回答如下:

我不完全理解您的问题,但是我在这里看到了问题。您需要复习Promises和Async等待的知识。您要么使用异步await或Promises(.then)语法以使其正常工作。

redis.js

class BasicRedis {
    constructor() {
        // TODO
    };
    redis = new Redis();
// You can either do it like this
    has(id) {
         return new Promise((res, rej) => {
           this.redis.exists(id)
             .then( exists => {
                res(exists)
             }).catch(err => {
                rej(err.message)
              });
         })
    };

// Or like this 
     has(id) {
         return this.redis.exists(id)
    };
}

在两种情况下,您都可以等待/。然后生成app.js

// app.js
const rBredis = require("./redis");
const redis = new rBredis();
redis.has("kek").then(res => console.log(res))

编辑-1

如果这需要花费甚至1毫秒的时间,那么您将无法立即获得价值。您需要使用async-await或promises。或使用类似这样的回调

redis.js


class BasicRedis {
    constructor() {
        // TODO
    };
    redis = new Redis();

      has(id, callback) {
           this.redis.exists(id)
             .then( exists => {
                callback(exists)
             }).catch(err => {
                callback(err.message)
              });
    };

}

app.js

const rBredis = require("./redis");
const redis = new rBredis();
redis.has("kek", (res) => console.log(res))

这里是指Promises MDN和Async Await MDN

希望有帮助。

Nodejs承诺待处理

我正在尝试为多个Redis连接创建一个构造函数,所以我已经开始尝试一些东西。我只是从Promise {}那里回来,但是如果在返回之前做console.log,我会得到真正的价值。

编辑:在没有异步/等待的情况下尝试仍然无法正常工作。

app.js

const rBredis = require("./redis");
const redis = new rBredis();
console.log(redis.has("kek"));

redis.js

const Redis = require("ioredis");
class BasicRedis {
    constructor() {
        // TODO
    };
    redis = new Redis();
    async has(id) {
        return await this.redis.exists(id)
            .then( exists => {
                // console.log(exists); works 0
                return exists; // works not Promise { <pending> }
            });
    };
}
module.exports = BasicRedis;
回答如下:

我不完全理解您的问题,但是我在这里看到了问题。您需要复习Promises和Async等待的知识。您要么使用异步await或Promises(.then)语法以使其正常工作。

redis.js

class BasicRedis {
    constructor() {
        // TODO
    };
    redis = new Redis();
// You can either do it like this
    has(id) {
         return new Promise((res, rej) => {
           this.redis.exists(id)
             .then( exists => {
                res(exists)
             }).catch(err => {
                rej(err.message)
              });
         })
    };

// Or like this 
     has(id) {
         return this.redis.exists(id)
    };
}

在两种情况下,您都可以等待/。然后生成app.js

// app.js
const rBredis = require("./redis");
const redis = new rBredis();
redis.has("kek").then(res => console.log(res))

编辑-1

如果这需要花费甚至1毫秒的时间,那么您将无法立即获得价值。您需要使用async-await或promises。或使用类似这样的回调

redis.js


class BasicRedis {
    constructor() {
        // TODO
    };
    redis = new Redis();

      has(id, callback) {
           this.redis.exists(id)
             .then( exists => {
                callback(exists)
             }).catch(err => {
                callback(err.message)
              });
    };

}

app.js

const rBredis = require("./redis");
const redis = new rBredis();
redis.has("kek", (res) => console.log(res))

这里是指Promises MDN和Async Await MDN

希望有帮助。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论