javascript - javascript 中的 promise 会干扰其余代码

标签 javascript html promise race-condition

我有以下 js 文件,我正在尝试创建一个包含今天和昨天的 csv 数据的表。我之前在竞争条件方面遇到了麻烦,所以现在尝试使用 promise ,并最终得到以下代码,但它 1) 似乎不起作用 2) 不允许所有其他代码工作,例如我的日历启动 $(document).ready(function() { $('#datetimepicker1').datetimepicker(); });

.js 文件:

$(document).ready(function() { $('#datetimepicker1').datetimepicker(); });
var p = function(url){
    return new Promise(function(resolve, reject){
        $.ajax({
            url: url,
            crossDomain:true,
            dataType:"jsonp",
            'success': function(response){ 
          $(".domain").append(response.results.collection1[0].date);
                var collection = response.results.collection2;
                for (var i = 1; i < collection.length; i++){  
                    $(".table-group1").append('<tr> <td>' + collection[i].domain.href + '</td>'+'<td>' + collection[i].dns + '</td>'+'<td> ' + collection[i].mail + '</td>'+'<td> ' + collection[i].web + '</td> </tr>');
                }
            resolve(collection);
            },
            'error': function(e){
                reject(e);
            }
        })
    })
}    
p(url_today).
    then(function (collection_today) {
        return p(url_yesterday).then(function(collection_yesterday){
            $(".table-group1").append('<tr><td>' + collection_today.domain.href + '</td>'+'<td>' + collection_today.dns + '</td>'
                +'<td> ' + collection_today.mail + '</td>'+'<td> ' + collection_today.web + '</td> <td>' + collection_yesterday.domain + '</td> <td>'
                + collection_yesterday.dns + '</td><td>'+ collection_yesterday.mail + '</td> <td>'+ collection_yesterday.web + '</td> </tr>');
        })
    })
    .catch(function(e){
        console.error(e);
    });

html 文件:

    <!-- Calendar -->  

<div class="container">
    <div class="row">
        <div class='col-sm-6'>
            <div class="form-group">
                <div class='input-group date' id='datetimepicker1'>
                    <input type='text' class="form-control" />
                    <span class="input-group-addon">
                        <span class="glyphicon glyphicon-calendar"></span>
                    </span>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- Table -->

<div class= "container_1">
<div class="panel panel-info">

<table class="table" border="1">
<th class="panel-heading"> </th>
<tr class="domain"> </tr>
<tr class="table-group1">
</tr> 
</table>

最佳答案

This doesn't address the underlying problems with the logic or best practice use of Promises etc. It addresses the issue of including the code stopping other code from working

您遇到问题的原因是代码中存在语法错误...例如第 15 行需要 , - js lint 不喜欢你最后的 then 代码 -

如果将其更改为以下内容

        $(".table-group1").append('<tr><td>' + collection_today.domain.href + '</td>' + '<td>' + collection_today.dns + '</td>' +
            '<td> ' + collection_today.mail + '</td>' + '<td> ' + collection_today.web + '</td> <td>' + collection_yesterday.domain + '</td> <td>' +
            collection_yesterday.dns + '</td><td>' + collection_yesterday.mail + '</td> <td>' + collection_yesterday.web + '</td> </tr>');

查看以 + 结尾的行并继续下一行,而不是以 + 开头的行

另一个问题是代码将立即运行 - 可能在 DOM 准备好之前

看起来所有代码都应该包含在 $(document).ready 中,而不仅仅是第一行

关于javascript - javascript 中的 promise 会干扰其余代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35048767/

相关文章:

javascript - YUI App transition "flickers"on showView

javascript - Dx数据网格 : Validating multiple edit fields at once

javascript - 如何创建无限改变不同背景颜色的循环动画

javascript - 等待 Sequelize 中所有未决的 promise

node.js - UnhandledPromiseRejectionWarning 即使代码在 async/await 中有 try/catch

javascript - 如何将回调样本转换为延迟对象?

javascript - jQuery 点击第二次点击不起作用

javascript - 为什么我无法从另一个组件访问 vue.js 属性?

html - href 样式继承

javascript - jQuery 同位素表问题,Firefox 除外