相关疑难解决方法(0)

如何将现有的回调API转换为承诺?

我想使用promises,但我有一个回调API,格式如下:

1. DOM加载或其他一次性事件:

window.onload; // set to callback
...
window.onload = function() {

};
Run Code Online (Sandbox Code Playgroud)

2.平原回调:

function request(onChangeHandler) {
    ...
}
request(function() {
    // change happened
    ...
});
Run Code Online (Sandbox Code Playgroud)

3.节点样式回调("nodeback"):

function getStuff(dat, callback) {
    ...
}
getStuff("dataParam", function(err, data) {
    ...
})
Run Code Online (Sandbox Code Playgroud)

4.具有节点样式回调的整个库:

API;
API.one(function(err, data) {
    API.two(function(err, data2) {
        API.three(function(err, data3) {
            ...
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

如何在promises中使用API​​,我该如何"宣传"它?

javascript callback node.js promise bluebird

680
推荐指数
12
解决办法
20万
查看次数

JavaScript是否保证对象属性顺序?

如果我创建这样的对象:

var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";
Run Code Online (Sandbox Code Playgroud)

生成的对象总是这样吗?

{ prop1 : "Foo", prop2 : "Bar" }
Run Code Online (Sandbox Code Playgroud)

也就是说,属性是否与我添加它们的顺序相同?

javascript object

584
推荐指数
11
解决办法
20万
查看次数

什么是明确的承诺构建反模式,我该如何避免它?

我编写的代码看起来像:

function getStuffDone(param) {           | function getStuffDone(param) {
    var d = Q.defer(); /* or $q.defer */ |     return new Promise(function(resolve, reject) {
    // or = new $.Deferred() etc.        |     // using a promise constructor
    myPromiseFn(param+1)                 |         myPromiseFn(param+1)
    .then(function(val) { /* or .done */ |         .then(function(val) {
        d.resolve(val);                  |             resolve(val);
    }).catch(function(err) { /* .fail */ |         }).catch(function(err) {
        d.reject(err);                   |             reject(err);
    });                                  |         });
    return d.promise; /* or promise() */ |     });
}                                        | }
Run Code Online (Sandbox Code Playgroud)

有人告诉我这个被称为" 延迟反模式 "或" Promise构造函数反模式 ",这个代码有什么不好,为什么这被称为 …

javascript promise q bluebird es6-promise

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

返回从循环中调用的数据库查询中检索的数据的问题

我在循环中进行多个mongoDB查询.并且想要将所有结果作为一个数据数组发送.但是当我简单地使用return来发送数据时,它只返回undefined而不等待所有数据库请求的结果.我也尝试过使用q.moulde但同样的问题.

码:

var getPrayerInCat = function(data){
    var result ;
    var finalData = [];
    if(data.length >0){
             data.forEach(function(data2){
                 var id= data2.id;
                 Prayer.find({prayerCat:id},function(err,prayer){
                     var deferred = Q.defer()
                     if (err) { // ...
                         console.log('An error has occurred');
                         // res.send(err);
                         result= finalData = err
                     } else {
                         if(!prayer){
                             // console.log(data2.id+'--0');
                             data2.prayersCount = 0;
                             result = deferred.resolve(finalData.push(data2))
                         } else {
                             // console.log(data2.id+'--'+prayer.length);
                             data2.prayersCount = prayer.length;
                             // console.log(prayer)
                             result =  deferred.resolve(finalData.push(data2))
                         } // else for data forward
                     }
                     deferred.promise;
                 })
                // deferred.resolve(finalData);

             })
             /*if(finalData.length > 0) { …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb node.js promise q

15
推荐指数
1
解决办法
3390
查看次数

使用承诺索引映射 Promise.all 输出

我正在使用 nodejs v8+,它支持默认的异步等待代码风格。

在我的问题中,我试图将所有承诺推送到一个数组中,然后使用 Promise.all 和 await 关键字来获取响应。但问题是,我无法用键映射承诺。

这是示例:

let users = ["user1", "user2", "user3"];

    let promises = [];
    for(let i = 0; i < users.length; i++){
      let response = this.myApiHelper.getUsersData(users[i]);
      promises.push(response);
    }
    let allResponses = await Promise.all(promises);
Run Code Online (Sandbox Code Playgroud)

在这里,我得到了所有响应的所有收集响应,但我实际上想按用户映射它。例如,目前我正在以这种格式获取数据:

[
{
  user1 Data from promise 1
},
{
  user2 Data from promise 2
},
{
  user3 Data from promise 3
}
]
Run Code Online (Sandbox Code Playgroud)

但我想要这种格式的数据:

[
 {
  "user1": Data from promise 1
 },
 {
   "user2": Data from promise 2
 },
 {
   "user3": …
Run Code Online (Sandbox Code Playgroud)

asynchronous node.js async-await es6-promise

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

如何在对象数组上使用 Promise.all,然后将它们重新分配给新对象中的相关键?

我有点卡在代码的中间部分。我知道我想要的结局和开始是什么样子,但似乎无法填补空白。

我调用fetch4 个 API 端点,并将其存储Promises到相关密钥中,该密钥告诉我它们是什么。

然后我使用循环遍历所有这些for in,并将所有这些推Promises入一个数组中,以便我可以调用Promise.all它们。

将数组成功记录到控制台后,我现在看到数组中充满了包含我的数据的对象。但是,我无法判断哪些数据属于哪个对象键,就像原始对象一样

有一个更好的方法吗?我确实知道我想在这段代码中使用这个事实Promise.all;这是我不想让步的事情,因为我正在努力弄清楚如何在不放弃的情况下使这成为可能(现在已经这样做了几个小时)。

在我的代码末尾(这只是我的 React 应用程序中真实示例的伪代码),我只想获取最终对象,并将其推送到state.

任何帮助表示赞赏。

//imitating React State as an example
const state = {
  iliakan: '',
  remy: '',
  jeresig: '',
}

//put all of the urls in an object with a key-pair value to describe the data
const githubAPI = {
  iliakan: 'https://api.github.com/users/iliakan',
  remy: 'https://api.github.com/users/remy',
  jeresig: 'https://api.github.com/users/jeresig'
}

//create an empty object to …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

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