小编ser*_*off的帖子

在 Vala 中使用 Glib.Settings 时如何处理错误?

我在 Vala 应用程序中使用 Glib.Settings。我想确保即使架构或密钥不可用,我的程序也能正常工作。所以我添加了一个 try/catch 块,但是如果我使用不存在的密钥,程序就会出现段错误。据我了解,它甚至没有到达 catch 语句。这是使用设置的函数:

GLib.Settings settings;
string token = "";
try 
{
    settings = new GLib.Settings (my_scheme);
    token = settings.get_string("token1");
}
catch (Error e) 
{
    print("error");
    token = "";
}
return token;
Run Code Online (Sandbox Code Playgroud)

程序输出为:

(main:27194): GLib-GIO-ERROR **: Settings schema 'my_scheme' does not contain a key named 'token1'
Trace/breakpoint trap (core dumped)
Run Code Online (Sandbox Code Playgroud)

(当然我使用的是我真正的方案字符串而不是 my_scheme)那么你能建议我哪里错了吗?

vala gsettings

6
推荐指数
1
解决办法
1092
查看次数

有没有办法在Vala中安装时创建GSettings架构?

我正在尝试使用Vala创建一个使用Glib.Settings的应用程序.如果应用程序中的架构或密钥不存在,我不希望我的应用程序崩溃.我已经明白我无法捕获它中的错误(如何在Vala中使用Glib.Settings时处理错误?),所以我需要以某种方式在安装程序时创建一个模式,否则它会崩溃.我不想让用户写一些类似的东西

glib-compile-schemas /usr/share/glib-2.0/schemas/
Run Code Online (Sandbox Code Playgroud)

在终端,所以我需要在程序内完成.

所以,问题是:我可以在程序中以某种方式编译模式吗?

vala gsettings

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

异步方法和线程之间有什么区别?

有人可以解释异步方法和在Vala中创建线程之间的区别吗?我应该在我的代码中使用哪一个?

multithreading asynchronous vala

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

如何正确设置GtkLabel的最大宽度?

我正在编写Vala应用程序并在其中使用GtkLabels.问题是,我使我的主窗口无法调整大小,当我添加带有长文本的标签时,窗口变得非常大(当窗口可调整大小时,所有标签都完美贴合).我尝试了set_max_width_chars()一些有用的功能,但我认为这不是正确的方法(因为用户的字体可能会有所不同,这不适用于与我不同的字体大小).

那么,问题是:如何以正确的方式做到这一点?

user-interface label alignment vala

5
推荐指数
2
解决办法
1559
查看次数

有没有一种方法可以将 where 和 where.not 组合成 Rails 中的一个条件?

我有一个Event模型,user_id里面有。我想选择该模型的所有对象,其中指定user_id但不包括特定事件。所以我可以用这样的查询来做到这一点:

Event.where(user_id: user.id).where.not(id: id)
Run Code Online (Sandbox Code Playgroud)

但是我可以将这两个where功能合二为一吗?

我知道,例如,如果我需要查找具有指定ids 和user_ids 的事件,我可以这样做:

Event.where(user_id: user_id).where(id: id)
Run Code Online (Sandbox Code Playgroud)

我可以使用一次where调用而不是两次来压缩它:

Event.where(user_id: user_id, id: id)
Run Code Online (Sandbox Code Playgroud)

where但如果我使用and ,我可以做同样的事情where.not吗?

sql orm activerecord ruby-on-rails

5
推荐指数
2
解决办法
3399
查看次数

如何在 Restify 中间件中捕获未处理的 Promise 拒绝?

我正在 Node.js 上编写 Restify 应用程序。我需要有一个函数,当 Restify 回调中发生一些错误时调用该函数。此函数应向客户端发送响应。如果我不使用 Promise 或异步函数,我可以这样做:

server.on('uncaughtException', (req, res, route, err) => {
  log.error(err);
  res.send(err);
});
Run Code Online (Sandbox Code Playgroud)

但是如果我的回调是async函数,那么函数内的异常不会被调用,unhandledPromiseRejection而是被引发。

我该如何重构我的代码,以便像处理通常的错误一样处理未处理的 Promise 拒绝?

是的,我知道我可以检查 Restify 中间件本身内部的错误,但它仍然使代码更复杂,更容易编写

if (!core.validateUUID(req.params.deviceId)) {
  throw new Error(`Device ${req.params.deviceId} is wrong`)
}
Run Code Online (Sandbox Code Playgroud)

然后

if (!core.validateUUID(req.params.deviceId)) {
  return next(new restify.InvalidArgumentError({ body: {
    success: false,
    error: `Device ${req.params.deviceId} is wrong`,
  } }));
}
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise async-await restify

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

在 JavaScript 中修改函数参数是一个坏习惯吗

我正在编写一个 Node.js 应用程序。有些地方我必须修改函数的参数。例如,这个 Express 中间件用于添加用户进行请求,以便我稍后可以查看它:

exports.fetchUserDetails = function (req, res, next) {
  httprequest(opts, function (err, res, body) {
    req.user = body.user;
    next()
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是,我开始使用静态代码分析器(ESLint),它总是抱怨重新分配函数参数(http://eslint.org/docs/rules/no-param-reassign)。我想这条规则的存在是有原因的。

我知道修改函数参数可能会很糟糕,就像这个例子一样:

function modifyParam(param) {
  param.a = 2
}

var obj = { a: 1 };
console.log(obj); // outputs { a: 1 };
modifyParam(obj);
console.log(obj); // outputs { a: 2 };
Run Code Online (Sandbox Code Playgroud)

但我真的没有看到在不重新分配参数的情况下重构中间件的其他方法。

所以我的问题是:

  • 什么时候可以使用参数重新分配?
  • 如何重构我的中间件以避免这种情况?(或者我应该保持原样)

javascript parameter-passing node.js eslint

4
推荐指数
1
解决办法
5778
查看次数

如何在猫鼬中获取模式的父级?

我正在编写一个 Node.js 应用程序,它使用 Mongoose 作为 ORM。

我有一个名为 Event 的模型和一个名为 Participant 的模式,它作为子文档存储在我的 Event 模式中。问题是,我需要实现一个应该访问父数据的方法。并且没有关于此的文档(或者我找不到任何文档)。如何从其孩子访问父母的数据?

我见过$parent几次的用法,但它对我不起作用。我也播种了 的用法this.parent(),但这会导致RangeError: Maximum call stack size exceeded我的示例。

这是我的代码示例:

const Participant = mongoose.Schema({
// description
});

const eventSchema = mongoose.Schema({
    applications: [Participant],
    // description
});

const Event = mongoose.model('Event', eventSchema);

Participant.virtual('url').get(function url() {
    // the next line causes a crash with 'Cannot get "id" of undefined'
    return `/${this.$parent.id}/participants/${this.id}`; // what should I do instead?
});
Run Code Online (Sandbox Code Playgroud)

mongoose node.js mongoose-schema

4
推荐指数
1
解决办法
2692
查看次数

Vala 中的“_”函数有什么作用?

我见过一些项目使用_以字符串作为参数的函数,例如_("Hello World"). 但我找不到任何关于它是什么以及如何使用它的手册或文章。

我想这与 i18n 和 l10n 有关(我在互联网上找到的一些文章中提到过),但是你能向我解释一下它是如何工作的以及如何使用它吗?

function vala

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

Jest - expect(...).toContainEqual不是一个函数

我正在使用Jest来测试我的Node.JS应用程序,当我运行我的测试时,一些内置函数不起作用,似乎它们没有被定义.例如,toContainEqualtoBeInstanceOf.

这是我的代码示例:

it('should delete DB entry', () => query(url, queryString)
    .then(res => res.json()
    .then(() => db.collection('exercises').find({}).toArray()))
    .then(res => expect(res).toContainEqual(originalExercise)))
Run Code Online (Sandbox Code Playgroud)

而我得到的错误:

TypeError: expect(...).toContainEqual is not a function
Run Code Online (Sandbox Code Playgroud)

但其他功能(如toEqual,toBeTruthy)工作正常.

我正在使用Jest v15.1.1(根据jest -v).

我怎么处理它?

javascript jestjs

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