小编Nep*_*oxx的帖子

在nodeJs中避免回调地狱/将变量传递给内部函数

这是我想简化的一个例子:

exports.generateUrl = function (req, res) {
    var id = req.query.someParameter;

    var query = MyMongooseModel.findOne({'id': id});
    query.exec(function (err, mongooseModel) {
        if(err) {
            //deal with it
        }

        if (!mongooseModel) {
            generateUrl(Id,
                function (err, text, url) {
                    if (err) {
                        res.status(HttpStatus.INTERNAL_SERVER_ERROR).send(err);
                        return;
                    }
                    var newMongooseModel = new AnotherMongooseModel();
                    newMongooseModel.id = id;

                    newMongooseModel.save(function (err) {
                        if (err) {
                            res.status(HttpStatus.INTERNAL_SERVER_ERROR).send(err);
                        } else {
                            res.send({url: url, text: text});
                        }
                    });
                });
        } else {
            //deal with already exists
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

我已经看到了其他SO的答案,他们告诉你使用命名函数,但是没有说明如何处理你想要传入的变量或者使用jQuery的队列.我也没有奢侈品.

我知道我可以用名称函数替换我的匿名函数,但是我需要传递变量.res如果函数在别处定义,我的内部函数将如何访问?

javascript callback mongoose node.js express

5
推荐指数
1
解决办法
3666
查看次数

'Promise <void>'类型中不存在属性'catch'

我正在使用Mongoose和Bluebird的打字稿.Mongoose设置为返回Bluebird承诺,但我不知道如何"告诉"TypeScript.

例如Message,如果我尝试执行以下操作,我有一个Mongoose模型:

new Message(messageContent)
  .save()
  .then(() => {...})
  .catch(next);
Run Code Online (Sandbox Code Playgroud)

TypeScript抱怨Property 'catch' does not exist on type 'Promise<void>'.因为它认为.save()(或任何其他Mongoose方法返回Promise)返回一个'常规'Promise(实际上没有.catch()方法)而不是Bluebird promise.

如何更改Mongoose方法的返回类型,以便TypeScript知道它返回了Bluebird的承诺?

mongoose node.js promise typescript bluebird

5
推荐指数
1
解决办法
3788
查看次数

用Bluebird替换Node的本机Promise

有没有办法替换Node.js中的本机Promise构造函数而不是基于每个文件(所以第三方库也将使用它)?

以下不起作用:

global.Promise = require('bluebird');

const foo = (cb) => cb('hello');

Promise.fromCallback(cb => foo(cb)) // TypeError: Promise.fromCallback is not a function
  .tap(val => console.log(val))
  .then(val => { console.log('fromCallback is supported!') });
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise bluebird

5
推荐指数
0
解决办法
1138
查看次数

将 subprocess.run 与包含引号的参数一起使用

我尝试运行的命令如下所示:

xvfb-run --auto-servernum --server-args="-screen 0 640x480x24" --error-file=/dev/stdout /opt/myExecutable
Run Code Online (Sandbox Code Playgroud)

这是我在 Python3 中的内容:

args = ['xvfb-run', '--auto-servernum','--server-args="-screen 0 640x480x24"', '--error-file=/dev/stdout', '/opt/myExecutable']
command = ' '.join(xvfbArgs)
print(f'Command: {command}')
subprocess.run(xvfbArgs)
Run Code Online (Sandbox Code Playgroud)

我得到以下信息:

Unrecognized option: "-screen
use: X [:<display>] [option]
...
segfault
...
Command: xvfb-run --auto-servernum --server-args="-screen 0 640x480x24" --error-file=/dev/stdout /opt/myExecutable
Run Code Online (Sandbox Code Playgroud)

打印的命令是正确的。

我也尝试过"-server-args='-screen 0 640x480x24'"(倒置"'这导致了相同的结果(Unrecognized option: '-screen

发生了什么subprocess.run变化--server-args="-screen 0 640x480x24"

python python-3.x

5
推荐指数
1
解决办法
2145
查看次数

调用抽象类的构造函数

假设我有以下类结构:

public class A{
    A(int a){
        ...
    }
}

abstract class B extends A{

}

public class C extends B{
    C(int a){
        super(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

在myMethod不会调用A的构造函数的意义上,此代码无效.有没有办法做到这一点?

我最终想要做的是在不影响其功能的情况下为一组类添加功能.所有这些类当前都扩展了一个公共类(runtimeException),所以我想添加一个中间抽象类.

(编辑:C中的代码不应该是一个方法,它应该是一个构造函数)

java inheritance

3
推荐指数
1
解决办法
396
查看次数