我们为什么要使用q.defer();在节点js?

时间:2018-01-22 11:15:04

标签: node.js

我正在学习节点JS。我读过一些文章,但我找不到合适的答案。

这是语法

'use strict';
var express = require('express'),
app = express();
var cors = require('cors');
let request = require('request');
let async = require('async');
let q = require('q');
let fs = require('fs');
let BC_STORE_URL = '*****************************';
let BC_USER = '********';
let BC_TOKEN = '******************************';

app.get('/api/:sku', function(req, res, next) {
   getData('products?sku=' + productSku).then((resData) => {
   });
})

let getData = function(storeField) {
    let listInfo = [];
    let deferred = q.defer();
    request(getDataOptions, (getDataOptionsError, getDataOptionsResponse, 
      getDataOptionsData) => {
        deferred.resolve(responseData);
      }
}

2 个答案:

答案 0 :(得分:1)

q.defer()用于创建延迟,用于处理promises。 promise将告诉调用者该方法在一段时间内返回一些数据(异步)。然后调用者可以在promise上声明逻辑,然后在返回数据时执行()。

您应该从getData函数返回一个promise,然后调用者可以使用()

  let getData = function(storeField) {
        let listInfo = [];
        let deferred = q.defer();
        request(getDataOptions, (getDataOptionsError, getDataOptionsResponse, 
          getDataOptionsData) => {
            deferred.resolve(responseData);
          }
        return deferred.promise;
    }

答案 1 :(得分:0)

以下是对您答案的更好解释: Q vs native promises