相关疑难解决方法(0)

JavaScript中的延迟/承诺概念是新概念还是函数式编程的传统部分?

我真的很喜欢jQuery延迟/承诺模式或范例的想法,但有时候我很难将我老化的大脑包裹在更精细的点或具体的实现细节之外.

事实上,最近我发现deferred/promise模式/范例似乎早于jQuery,并且至少在其他JavaScript库/框架中:

我可能错过了一些,其中包含其他一些内容的东西,并在该列表中犯了其他错误...请编辑它以纠正它或发表评论.

"Q"是否发明了延迟/承诺概念?它是用其他JavaScript库或框架发明的吗?还是它完全早于JavaScript?

如果整个想法传统上是函数式编程的一部分,它首先在哪里完成,我在哪里可以阅读有关概念而不是这些各种不同的JavaScript实现?

或者功能性编程完全不是重点?概念是否与并发编程相关而不是与函数式编程相关?

javascript history functional-programming promise deferred

12
推荐指数
2
解决办法
2192
查看次数

从承诺结果导出节点模块

我正在尝试重写模块以返回与以前不同的值,但现在它使用异步调用来获取该值.(child_process如果重要的话).我把它包装在Promise中,但这对我来说并不重要 - 它可以在原始的child_process回调中,但问题是我无法将承诺链接到应用程序中的任何地方,因为我需要这个变为同步.这是我的模块:

exec = require('child_process').exec

platformHome = process.env[if process.platform is 'win32' then 'USERPROFILE' else 'HOME']

getExecPath = new Promise (resolve, reject) ->
  path = process.env.GEM_HOME

  if path
    resolve(path)
  else
    exec 'gem environment', (err, stdout, stderr) ->
      unless err
        line = stdout.split(/\r?\n/)
                 .find((l) -> ~l.indexOf('EXECUTABLE DIRECTORY'))
        if line
          resolve line[line.indexOf(': ') + 2..]
        else
          reject undefined

GEM_HOME = undefined

getExecPath.then (path) ->
  GEM_HOME = path
.catch ->
  GEM_HOME = "#{platformHome}/.gem/ruby/2.3.0"
.then =>
  module.exports = GEM_HOME // or simply …
Run Code Online (Sandbox Code Playgroud)

javascript node.js coffeescript

9
推荐指数
1
解决办法
7219
查看次数

jQuery延迟不按顺序调用resolve/done回调

代码示例:http://jsfiddle.net/MhEPw/1/

我有两个jQuery Deferred对象.

我希望发生多个"异步"请求 - 并且在它们全部运行之后我希望回调(.done函数)按照指定的顺序运行.不幸的是它们不按顺序运行.

也许我正在寻找Deferred不提供的一些功能?

javascript ajax jquery asynchronous jquery-deferred

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

Select2:结果未显示使用AJAX

我无法使用AJAX将结果显示在Select2中.这是我的代码:

$(document).ready(function() {
    $("#producto").select2({
        placeholder: 'Select a product',
        formatResult: productFormatResult,
        formatSelection: productFormatSelection,
        dropdownClass: 'bigdrop',
        escapeMarkup: function(m) { return m; },
        minimumInputLength:3,
        ajax: {
            url: 'http://foo.foo/listar.json',
            dataType: 'jsonp',
            data: function(term, page) {
                return {
                    q: term
                };  
            },  
            results: function(data, page) {
                return {results:data};
            }   
        }   
    });


function productFormatResult(product) {
    var html = "<table class='product-resultado'><tr>";
    if(product.img != undefined) {
        html += "<td class='product-image'><img src='"+product.img+"'/></td>";
    }
    html += "<td class='product-info'>";
    html += product.text + "<br />";
    html += product.precio_costo + " CRC …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jsonp jquery-select2

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

延迟和Ajax

像这样读JSON-Service:

$.ajax({
  url:'activeIDs',
  success : function(data){ // data = [14,15]
    var tableRows = [];
    for (var dataIndex=0; dataIndex < data.length; dataIndex++) {
      var isLast = dataIndex == (data.length - 1);
      $.ajax({
        url: 'info?id=' + data[dataIndex],
        success: function(data2) { // "foo", "bar"
          tableRows.push(data2.name);
          if (isLast) {
            alert(tableRows.length);
          }
        }
      });
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

第一个网络跟踪是:

  1. activeIDs = [14,15]
  2. info?id = 14(需要2秒)= "foo"
  3. info?id = 15(需要4秒)= "bar"

在这种情况下,警报给出"2".

秒网络跟踪是不同的:

  1. activeIDs = [14,15];
  2. info?id = 14(需要20秒)= "foo"(现在需要很长时间)
  3. info?id = 15(需要1秒)= "bar"

在这种情况下警报提供 …

ajax jquery jquery-deferred

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

实施承诺模式

我有一个用其他对象调用的函数,当我的应用程序被加载时,获取参数,函数应该等待所有对象的调用,然后使用promises模式执行,我可以确保所有对象都已加载但我不知道对象的数量,我不希望设置超时加载.我不谈论特定的技术,如jquery需要算法.

伪代码:

      function loadWidget(id){
        list.push(id);
       //here I should ensure all Widget is loaded


          }
Run Code Online (Sandbox Code Playgroud)

在其他应用程序我打电话

    app.loadWidget.add(widget1.id);
    .
    .
    .      
    app.loadWidget.add(widget2.id);
Run Code Online (Sandbox Code Playgroud)

javascript algorithm design-patterns

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

JavaScript中的Promise.all:如何获得所有承诺的解析价值?

我写了以下node.js文件:

var csv = require('csv-parser');
var fs = require('fs')
var Promise = require('bluebird');
var filename = "devices.csv";
var devices;

Promise.all(read_csv_file("devices.csv"), read_csv_file("bugs.csv")).then(function(result) {
    console.log(result);
});


function read_csv_file(filename) {
    return new Promise(function (resolve, reject) {
            var result = []
            fs.createReadStream(filename)
                .pipe(csv())
                .on('data', function (data) {
                    result.push(data)
                }).on('end', function () {
                resolve(result);
            });
    })
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我用Promise.all它来等待读取csv文件的两个操作.我不明白为什么,但是当我运行代码时,该行'console.log(result)'未提交.

我的第二个问题是我希望回调函数Promise.all.then()接受两个不同的变量,而其中每个变量都是相关承诺的结果.

javascript node.js promise ecmascript-6 bluebird

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

Ajax调用没有返回正确的变量

可能重复:
jQuery:在ajax调用成功后返回数据

我有一个问题,让这个ajax功能工作,不知道我搞砸了.

var getTotalEntries = function(query) {
  var total;
  $.ajax({
    url: url,
    data: query,
    dataType: 'jsonp',
    success: function(data) {
      console.log(data.total);
      total = data.total;
    }
  });

  return total;     
};
Run Code Online (Sandbox Code Playgroud)

这会将65记录到控制台,但返回undefined ...不确定发生了什么.

javascript ajax jquery

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

为什么可以将非函数参数传递给 Promise.then() 而不会导致错误?

我有以下几点:

new Promise(resolve => setTimeout(resolve, 2000))
    .then(() => console.log("after 2 seconds"));

new Promise(resolve => setTimeout(resolve, 3000))
    .then(console.log("before 3 seconds (instantly)"));
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

> node index.js
before 3 seconds (instantly)
after 2 seconds
Run Code Online (Sandbox Code Playgroud)

Promise.then()需要一个onFulfilled函数,但我传入的console.log("before 2 seconds (instantly)")不是函数。两部分问题:

  • 为什么console.log("before 2 seconds (instantly)")会立即执行(或根本执行)?
  • 当我没有传入函数时,为什么第二个 Promise 没有引发异常?

javascript node.js promise

4
推荐指数
2
解决办法
4493
查看次数

数据仅在提醒后可用

可能重复:
jQuery:在ajax调用成功后返回数据

我写了一个脚本,在里面用一个select字段添加一个新的div容器.select字段的数据之前加载了ajax请求.但由于某种原因,只有当我使用alert()输出内容时,这些字段才可见.

var o = '';
            $.ajax({
                type: 'post',
                dataType: 'json',
                url: webroot + 'items',
                success: function(data) {
                    $.each(data, function(index, value) {
                        o += '<option value="' + index + '">' + value + '</option>';
                    });
                }
            });
            var l = parseInt($('.items .item').length);
            var h = '<div class="item"><span class="bold">Item ' + (l + 1) + '</span><select id="ItemName" name="data[Item][name]">' + o + '</select></div>';
Run Code Online (Sandbox Code Playgroud)

我实际上不知道如何解决这个问题.你能帮助我吗?

javascript jquery

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