小编Jef*_*eff的帖子

业力错误'没有时间戳'

试图让业力与requirejs一起工作.我不明白为什么我在运行Karma时遇到所有这些错误:

ERROR: 'There is no timestamp for /base/test/mainSpec.js?bust=1387739317116!'
ERROR: 'There is no timestamp for /base/app/main.js?bust=1387739317116!'
ERROR: 'There is no timestamp for /base/bower_components/jquery/jquery.js?bust=1387739317116!'
Run Code Online (Sandbox Code Playgroud)

当我在检查器中转到网络选项卡时,所有文件都没有404.

我有点困惑,因为业力似乎在寻找一个"基础"目录,但我的项目中没有"基础"目录.根据业力文档:

Karma提供/ base目录下的文件.因此,在服务器上将提供对文件的请求 http://localhost:9876/base/*.baseUrl的Require.js配置为使用相对路径加载的模块提供了起始上下文.为Karma服务器设置此值时,需要以/ base开头.我们希望测试的baseUrl与src/main.js中的基本URL相同,因此源中的相对需求不需要更改.所以,因为我们希望我们的基本URL位于src /,我们需要写/ base/src.

这至少令人困惑.我应该在main.js文件中有一个指向'/ base'的baseUrl配置吗?

requirejs karma-runner

50
推荐指数
3
解决办法
3万
查看次数

如何在没有延迟的anit-pattern的情况下将jQuery $ .ajax调用转换为Bluebird promises

现在我在核心文件中使用promise.deferred.这允许我在中心位置解决承诺.我一直在读,我可能正在使用反模式,我想知道为什么它是坏的.

所以在我的core.js文件中我有这样的函数:

var getMyLocation = function(location) {    
    var promiseResolver = Promise.defer();

    $.get('some/rest/api/' + location)
        .then(function(reponse) {
            promiseResolver.resolve(response);
        )}
        .catch(function(error) {
            promiseResolver.reject(error);
        });

     return promiseResolver.promise;
}
Run Code Online (Sandbox Code Playgroud)

然后在我的getLocation.js文件中,我有以下内容:

var core = require('core');
var location = core.getMyLocation('Petersburg')
    .then(function(response) {
        // do something with data
    }).catch(throw error);
Run Code Online (Sandbox Code Playgroud)

在阅读了关于延迟反模式的Bluebird文档和许多博客文章后,我想知道这种模式是否实用.我可以将此更改为以下内容:

core.js

var getMyLocation = function(location) {
    var jqXHR = $.get('some/rest/api/' + location);
    return Promise.resolve(jqXHR)
        .catch(TimeoutError, CancellationError, function(e) {
            jqXHR.abort();
            // Don't swallow it
            throw e;
        });
Run Code Online (Sandbox Code Playgroud)

getLocation.js

var location = core.getMyLocation('Petersburg')
    .then(function(response) …
Run Code Online (Sandbox Code Playgroud)

javascript promise bluebird

20
推荐指数
1
解决办法
8702
查看次数

使用navigator.language获取用户的区域

有一段时间,我一直在使用这样的东西来获取用户的国家(ISO-3166):

const region = navigator.language.split('-')[1]; // 'US'
Run Code Online (Sandbox Code Playgroud)

我总是假设字符串类似于en-US- 国家将保持数组的第二个位置.

我认为这个假设是不正确的.根据MDN文档,navigator.language返回:"表示BCP 47中定义的语言版本的字符串." 读取BCP 47,主要语言子标签保证是第一个(例如,'en'),但区域代码不保证是第二个子标签.区域子标签之前和之后可以有子标签.

例如"sr-Latn-RS",有效的BCP 47语言标记:

sr                |  Latn           |  RS
primary language  |  script subtag  |  region subtag
Run Code Online (Sandbox Code Playgroud)

navigator.languageBCP 47的子集返回的值是否仅包含语言和区域?或者是否存在通常用于从语言标记中提取区域子标签的库或正则表达式?

javascript locale iso-3166 ietf-bcp-47

17
推荐指数
3
解决办法
7678
查看次数

要求使用AMD模式为jQuery UI事件提供错误

在我的代码中,test.js依赖于jquery-ui,它不使用需要AMD模式和test.spec.js依赖于jquery-ui,test.js使用AMD模式.我们可以在运行test.spec.js时动态加载jquery-ui在test.js中的依赖关系.

require.config({

    baseUrl: '/demo',

    paths: {
        'jquery': '../library/jquery-1.11.1',
        'jquery-ui': '../library/jquery-ui-1.11.4'
    },
    shim: {
        'jquery': {
            exports: 'jQuery'
        },
        'jquery-ui': {
            deps: ['jquery']
        },
        'library/src/js/test': {
            deps: ['library/jquery-1.11.1', 'library/jquery-ui-1.11.4', '../js/collapse'],
            exports: 'Test'
        }
    },
    callback: window.__karma__.start
});
Run Code Online (Sandbox Code Playgroud)

在test.js中写入了jquery-ui draggable事件的"draggable".在评估$('#panelId').draggable({revert: true}); 得到错误后

"TypeError:'undefined'不是函数(评估'$('#panelId').draggable({revert:true})')"

如何在require.config中为test.js加载jquery-ui.因为我用它来运行我的茉莉花测试用例.在真实环境中,它按预期工作,但在jasmine测试用例中无法找到jquery-ui事件.test.js不使用require.js,但test.spec.js使用require AMD模式.

在test.spec.js代码执行后得到jquery-ui draggable undefined的错误

define(['jquery-ui','library/src/js/test'], function ($) {

});
Run Code Online (Sandbox Code Playgroud)

我能够使用$访问test.spec.js中的jquery ui,而不是在test.js中,其中jquery-ui事件被写为test.js不使用AMD require模式.不知道遗失了什么.任何帮助将被appriciated ... :)

javascript jquery-ui amd requirejs jasmine

8
推荐指数
1
解决办法
398
查看次数

每次更新代码时,使用 AWS SAM-CLI 都需要重建

我正在使用 SAM CLI 开发 API Gateway Lambda 代理集成。根据文档,我应该能够sam local start-api在本地测试我的端点。该start-api命令允许“热重新加载”,如AWS SAM 文档中所述。但是,我没有看到这种行为。

我的template.yaml文件如下所示:

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      PackageType: Image
      Architectures:
        - x86_64
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /hello
            Method: get
    Metadata:
      Dockerfile: Dockerfile
      DockerContext: ./hello_world
      DockerTag: python3.9-v1
Run Code Online (Sandbox Code Playgroud)

当我跑步时:

> sam build && sam local start-api
Run Code Online (Sandbox Code Playgroud)

我可以看到端点正在工作:

在http://127.0.0.1:3000/hello处安装 HelloWorldFunction
您现在可以浏览到上述端点来调用您的函数。您在使用功能时无需重新启动/重新加载 SAM CLI,更改将立即/自动反映。

lambda_handler但是,当我对内部的函数进行更改时./hello_world/app.py, 的响应curl http://localhost:3000保持不变。不会发生热重载。

我发现的唯一解决方案是针对每个代码更改运行sam build。这极大地减慢了开发时间——由于 内部的一些依赖关系requirements.txt,我必须等待 1-2 分钟来构建每个代码更改。我可以只处理 …

amazon-web-services aws-sam-cli aws-serverless aws-sam

8
推荐指数
2
解决办法
8556
查看次数

蓝鸟的嵌套承诺

我正在试图找出如何正确使用蓝鸟库的promises.我在我的代码中遇到了一些嵌套的promise,我注意到在bluebird文档中它的内容如下:

如果您正在使用完整的bluebird API产品,那么您几乎不需要首先采用嵌套承诺.

关于承诺被滥用的许多其他博客文章和嵌套是一种常规的反模式.

loadCar(someUri) // jqXHR
    .then(function (car) {
        if (carHasFourDoors(car)) {
            loadMake(car.make)
                .then(function (make) {
                    loadModel(make.model)
                        .then(function (model) {
                            loadCarDetails(model)
                        });
                });
        }
        else if (carHasTwoDoors(car)) {
            loadModel(make.model)
                .then(function (model) {
                    loadCarDetails(model)
                });
        }
    });
Run Code Online (Sandbox Code Playgroud)

我的所有函数都返回对象.看看蓝鸟文档,似乎有多种帮助方法:all(),join(),props().

所以,我的问题是:如果存在依赖关系,我怎么能避免嵌套?也许这是我对承诺的异步性质的误解.这样的事可以吗?

Promise.all(loadCar(someUri), loadMake(car.make), loadModel(make.model))
    .then(function(car, make, model) {
        // do logic
    });
Run Code Online (Sandbox Code Playgroud)

javascript promise bluebird

7
推荐指数
1
解决办法
3923
查看次数

如何管理反应中复杂的项目列表?

我正在构建一个多面搜索组件。我无法弄清楚如何以及在哪里处理状态。

在此输入图像描述

解决方案#1

组件管理状态- 使用减速器来管理所有组件并将状态向下传递

缺点:子组件有很多复杂性(自动完成、焦点状态),并且更新父级的状态会导致子组件重新渲染。这意味着子组件的焦点状态和建议无法正常工作。

优点:设计更简洁,状态在一个减速器中处理

解决方案#2

子组件管理自己的状态(如不受控制的组件)。父组件仅管理创建、删除新的复杂组件。一旦孩子们知道他们完成了(失去焦点),他们就会更新对父母的引用。

缺点:管理两个状态和重复的关键错误

优点:子组件按预期工作


帮助和建议

这两种解决方案都很难实现,但到目前为止,我对解决方案 #2 的运气更好。

有没有这方面的好例子?似乎可编辑的待办事项列表也会有类似的问题。

我喜欢解决方案#1 的想法,但我认为我需要一种方法来推迟更新状态。

javascript frontend reactjs react-state-management react-hooks

7
推荐指数
1
解决办法
782
查看次数

如何在 ipython 中渲染 matplotlib 图

我有一个运行 Python/JupyterLab 和我所有依赖项的容器。我从以下开始:

docker run --rm -it -p 8888:8888 \
  --mount type=bind,source=/project,target=/work \
  python-3.9.1-jupyterlab
Run Code Online (Sandbox Code Playgroud)

它启动 jupyterlab,我可以通过浏览器连接。一切都很好。


现在我正在尝试使用 VSCode 作为 Python IDE。将 VSCode 中的 shell 附加到我的容器很有帮助,这样我就可以在一个地方运行 iPython 并编辑我的代码。我从 VSCode Docker 扩展运行“附加外壳”:

docker exec -it {containerID} bash <
Run Code Online (Sandbox Code Playgroud)

然后我打开一个 iPython shell:

docker exec -it {containerID} bash <
Run Code Online (Sandbox Code Playgroud)

我看不到任何情节。我试过用不同的后端渲染它们(默认是“agg”)。我认为这是因为内核 - 在容器上执行 - 无法使用主机图形(即,内核可以渲染绘图但无法显示它们)。也许我没有正确映射主机/容器端口。

有人可以就尝试的事情提供一些指导吗?这是我正在使用的容器的图像

matplotlib ipython docker visual-studio-code jupyter-console

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

当一个promise依赖于另一个promise时,Bluebird的Promise.all()方法

我正在编写一些当前看起来像这样的代码,因为我的代码中有依赖项.我想知道是否有一种更简洁的方法来使用Promise.all()?这是我的伪代码:

        return someService.getUsername()
            .then(function(username) {
                user = username;
            })
            .then(function() {
                return someService.getUserProps(user);
            })
            .then(function(userProps) {
                userProperties = userProps;
                return someService.getUserFriends(user);
            })
            .then(function(userFriends) {
                friends = userFriends;
            })
            .catch(error)
            .finally(function(){
                // do stuff with results
            });
Run Code Online (Sandbox Code Playgroud)

重要的是我需要用户才能为getUserProps()和getUserFriends()进行第二次调用.我以为我可以这样使用Promise.all():

var user = someService.getUsername()
    .then(function(username) {
        user = username;
    })
var getUserProps = someService.getUserProps(user);
var getUserProps = someService.getUserFriends(user);

return Promise.all(user, getUserProps, getUserFriends, function(user, props, friends) {
    // do stuff with results
})
Run Code Online (Sandbox Code Playgroud)

但我不能让这个工作.这是正确使用的案例.all?

javascript promise bluebird

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

在git rebase之后,我的本地分支和远程分支发生了分歧

我有一个my-feature分支,被推到原点进行代码审查.它不是共享的.最终它将合并到我的团队中共享的develop分支中.我想将我的分支重新设置为保持历史清洁,然后将我的功能分支合并到develop中.这就是我一直在做的事情:developmy-feature

$ git checkout my-feature
// do some work. make commits.

$ git rebase develop
// fix some conflicts

$ git add .

$ git rebase --continue
Run Code Online (Sandbox Code Playgroud)

成功重新定位后,我检查状态:

$ git status
On branch my-feature
Your branch and 'origin/my-feature' have diverged,
and have 155 and 1 different commit each, respectively.
  (use "git pull" to merge the remote branch into yours)

$ git what do I do here?
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做.如果我git pull,那么我注意到我会得到一些没有意义的冲突.有人说强行推,但我很担心.强制将我的主题分支推送到原点是否正常? …

git git-pull git-rebase

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