这是我想简化的一个例子:
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如果函数在别处定义,我的内部函数将如何访问?
我正在使用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的承诺?
有没有办法替换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) 我尝试运行的命令如下所示:
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"?
假设我有以下类结构:
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中的代码不应该是一个方法,它应该是一个构造函数)
node.js ×3
bluebird ×2
javascript ×2
mongoose ×2
promise ×2
callback ×1
express ×1
inheritance ×1
java ×1
python ×1
python-3.x ×1
typescript ×1